FLA_QR_UT_UD_Accum_T_opt_var1.c File Reference

(r)


Functions

FLA_Error FLA_QR_UT_UD_Accum_T_opt_var1 (FLA_Obj U, FLA_Obj D, FLA_Obj T)
FLA_Error FLA_QR_UT_UD_Accum_T_opt_var1_float (FLA_Obj U, FLA_Obj D, FLA_Obj T)
FLA_Error FLA_QR_UT_UD_Accum_T_opt_var1_double (FLA_Obj U, FLA_Obj D, FLA_Obj T)
FLA_Error FLA_QR_UT_UD_Accum_T_opt_var1_scomplex (FLA_Obj U, FLA_Obj D, FLA_Obj T)
FLA_Error FLA_QR_UT_UD_Accum_T_opt_var1_dcomplex (FLA_Obj U, FLA_Obj D, FLA_Obj T)

Function Documentation

FLA_Error FLA_QR_UT_UD_Accum_T_opt_var1 ( FLA_Obj  U,
FLA_Obj  D,
FLA_Obj  T 
)

References FLA_Obj_datatype(), FLA_QR_UT_UD_Accum_T_opt_var1_dcomplex(), FLA_QR_UT_UD_Accum_T_opt_var1_double(), FLA_QR_UT_UD_Accum_T_opt_var1_float(), and FLA_QR_UT_UD_Accum_T_opt_var1_scomplex().

Referenced by FLA_QR_UT_UD_internal().

00037 {
00038   FLA_Datatype datatype;
00039 
00040   datatype = FLA_Obj_datatype( U );
00041 
00042   switch ( datatype )
00043   {
00044     case FLA_FLOAT:
00045     FLA_QR_UT_UD_Accum_T_opt_var1_float( U,
00046                                          D, T );
00047     break;
00048 
00049     case FLA_DOUBLE:
00050     FLA_QR_UT_UD_Accum_T_opt_var1_double( U,
00051                                           D, T );
00052     break;
00053 
00054     case FLA_COMPLEX:
00055     FLA_QR_UT_UD_Accum_T_opt_var1_scomplex( U,
00056                                             D, T );
00057     break;
00058 
00059     case FLA_DOUBLE_COMPLEX:
00060     FLA_QR_UT_UD_Accum_T_opt_var1_dcomplex( U,
00061                                             D, T );
00062     break;
00063   }
00064 
00065   return FLA_SUCCESS;
00066 }

FLA_Error FLA_QR_UT_UD_Accum_T_opt_var1_dcomplex ( FLA_Obj  U,
FLA_Obj  D,
FLA_Obj  T 
)

References FLA_Apply_househ2_UT_opt_dcomplex(), FLA_Househ2_UT_opt_dcomplex(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_ONE, FLA_ZERO, and zgemv().

Referenced by FLA_QR_UT_UD_Accum_T_opt_var1().

00297 {
00298   dcomplex* buff_U  = FLA_DOUBLE_COMPLEX_PTR( U );
00299   dcomplex* buff_D  = FLA_DOUBLE_COMPLEX_PTR( D );
00300   dcomplex* buff_T  = FLA_DOUBLE_COMPLEX_PTR( T );
00301   dcomplex* buff_1  = FLA_DOUBLE_COMPLEX_PTR( FLA_ONE );
00302   dcomplex* buff_0  = FLA_DOUBLE_COMPLEX_PTR( FLA_ZERO );
00303 
00304   int       m_UT    = FLA_Obj_length( U );
00305   int       m_D     = FLA_Obj_length( D );
00306   int       ldim_U  = FLA_Obj_ldim( U );
00307   int       ldim_D  = FLA_Obj_ldim( D );
00308   int       ldim_T  = FLA_Obj_ldim( T );
00309  
00310   char      trans   = 'C';
00311   int       inc_one = 1;
00312   int       i;
00313 
00314   for ( i = 0; i < m_UT; ++i )
00315   {
00316     dcomplex* upsilon11 = buff_U + (i  )*ldim_U + i;
00317     dcomplex* u12t      = buff_U + (i+1)*ldim_U + i;
00318 
00319     dcomplex* D0        = buff_D + (0  )*ldim_D;
00320     dcomplex* d1        = buff_D + (i  )*ldim_D;
00321     dcomplex* D2        = buff_D + (i+1)*ldim_D;
00322 
00323     dcomplex* tau11     = buff_T + (i  )*ldim_T + i;
00324     dcomplex* t01       = buff_T + (i  )*ldim_T;
00325 
00326     int       mn_ahead  = m_UT - i - 1;
00327     int       mn_behind = i;
00328 
00329     //------------------------------------------------------------//
00330 
00331     // FLA_Househ2_UT( upsilon11,
00332     //                 d1, tau11 );
00333     FLA_Househ2_UT_opt_dcomplex( m_D,
00334                                  upsilon11,
00335                                  d1, inc_one,
00336                                  tau11 );
00337 
00338     if ( i > 0 )
00339     {
00340       // FLA_Gemv_external( FLA_CONJ_TRANSPOSE, FLA_ONE, D0, d1, FLA_ZERO, t01 );
00341       FLA_C2F( zgemv )( &trans,
00342                         &m_D, &mn_behind,
00343                         buff_1,
00344                         D0, &ldim_D,
00345                         d1, &inc_one,
00346                         buff_0,
00347                         t01, &inc_one );
00348     }
00349 
00350     if ( i < m_UT - 1 )
00351     {
00352       // FLA_Apply_househ2_UT( tau11, d1, u12t,
00353       //                                  D2 );
00354       FLA_Apply_househ2_UT_opt_dcomplex( m_D, mn_ahead,
00355                                          tau11,
00356                                          d1, inc_one,
00357                                          u12t, ldim_U,
00358                                          D2, ldim_D );
00359     }
00360 
00361     //------------------------------------------------------------//
00362 
00363   }
00364 
00365   return FLA_SUCCESS;
00366 }

FLA_Error FLA_QR_UT_UD_Accum_T_opt_var1_double ( FLA_Obj  U,
FLA_Obj  D,
FLA_Obj  T 
)

References dgemv(), FLA_Apply_househ2_UT_opt_double(), FLA_Househ2_UT_opt_double(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_ONE, and FLA_ZERO.

Referenced by FLA_QR_UT_UD_Accum_T_opt_var1().

00147 {
00148   double* buff_U  = FLA_DOUBLE_PTR( U );
00149   double* buff_D  = FLA_DOUBLE_PTR( D );
00150   double* buff_T  = FLA_DOUBLE_PTR( T );
00151   double* buff_1  = FLA_DOUBLE_PTR( FLA_ONE );
00152   double* buff_0  = FLA_DOUBLE_PTR( FLA_ZERO );
00153 
00154   int     m_UT    = FLA_Obj_length( U );
00155   int     m_D     = FLA_Obj_length( D );
00156   int     ldim_U  = FLA_Obj_ldim( U );
00157   int     ldim_D  = FLA_Obj_ldim( D );
00158   int     ldim_T  = FLA_Obj_ldim( T );
00159  
00160   char    trans   = 'T';
00161   int     inc_one = 1;
00162   int     i;
00163 
00164   for ( i = 0; i < m_UT; ++i )
00165   {
00166     double* upsilon11 = buff_U + (i  )*ldim_U + i;
00167     double* u12t      = buff_U + (i+1)*ldim_U + i;
00168 
00169     double* D0        = buff_D + (0  )*ldim_D;
00170     double* d1        = buff_D + (i  )*ldim_D;
00171     double* D2        = buff_D + (i+1)*ldim_D;
00172 
00173     double* tau11     = buff_T + (i  )*ldim_T + i;
00174     double* t01       = buff_T + (i  )*ldim_T;
00175 
00176     int     mn_ahead  = m_UT - i - 1;
00177     int     mn_behind = i;
00178 
00179     //------------------------------------------------------------//
00180 
00181     // FLA_Househ2_UT( upsilon11,
00182     //                 d1, tau11 );
00183     FLA_Househ2_UT_opt_double( m_D,
00184                                upsilon11,
00185                                d1, inc_one,
00186                                tau11 );
00187 
00188     if ( i > 0 )
00189     {
00190       // FLA_Gemv_external( FLA_CONJ_TRANSPOSE, FLA_ONE, D0, d1, FLA_ZERO, t01 );
00191       FLA_C2F( dgemv )( &trans,
00192                         &m_D, &mn_behind,
00193                         buff_1,
00194                         D0, &ldim_D,
00195                         d1, &inc_one,
00196                         buff_0,
00197                         t01, &inc_one );
00198     }
00199 
00200     if ( i < m_UT - 1 )
00201     {
00202       // FLA_Apply_househ2_UT( tau11, d1, u12t,
00203       //                                  D2 );
00204       FLA_Apply_househ2_UT_opt_double( m_D, mn_ahead,
00205                                        tau11,
00206                                        d1, inc_one,
00207                                        u12t, ldim_U,
00208                                        D2, ldim_D );
00209     }
00210 
00211     //------------------------------------------------------------//
00212 
00213   }
00214 
00215   return FLA_SUCCESS;
00216 }

FLA_Error FLA_QR_UT_UD_Accum_T_opt_var1_float ( FLA_Obj  U,
FLA_Obj  D,
FLA_Obj  T 
)

References FLA_Apply_househ2_UT_opt_float(), FLA_Househ2_UT_opt_float(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_ONE, FLA_ZERO, and sgemv().

Referenced by FLA_QR_UT_UD_Accum_T_opt_var1().

00072 {
00073   float* buff_U  = FLA_FLOAT_PTR( U );
00074   float* buff_D  = FLA_FLOAT_PTR( D );
00075   float* buff_T  = FLA_FLOAT_PTR( T );
00076   float* buff_1  = FLA_FLOAT_PTR( FLA_ONE );
00077   float* buff_0  = FLA_FLOAT_PTR( FLA_ZERO );
00078 
00079   int    m_UT    = FLA_Obj_length( U );
00080   int    m_D     = FLA_Obj_length( D );
00081   int    ldim_U  = FLA_Obj_ldim( U );
00082   int    ldim_D  = FLA_Obj_ldim( D );
00083   int    ldim_T  = FLA_Obj_ldim( T );
00084 
00085   char   trans   = 'T';
00086   int    inc_one = 1;
00087   int    i;
00088 
00089   for ( i = 0; i < m_UT; ++i )
00090   {
00091     float* upsilon11 = buff_U + (i  )*ldim_U + i;
00092     float* u12t      = buff_U + (i+1)*ldim_U + i;
00093 
00094     float* D0        = buff_D + (0  )*ldim_D;
00095     float* d1        = buff_D + (i  )*ldim_D;
00096     float* D2        = buff_D + (i+1)*ldim_D;
00097 
00098     float* tau11     = buff_T + (i  )*ldim_T + i;
00099     float* t01       = buff_T + (i  )*ldim_T;
00100 
00101     int    mn_ahead  = m_UT - i - 1;
00102     int    mn_behind = i;
00103 
00104     //------------------------------------------------------------//
00105 
00106     // FLA_Househ2_UT( upsilon11,
00107     //                 d1, tau11 );
00108     FLA_Househ2_UT_opt_float( m_D,
00109                               upsilon11,
00110                               d1, inc_one,
00111                               tau11 );
00112 
00113     if ( i > 0 )
00114     {
00115       // FLA_Gemv_external( FLA_CONJ_TRANSPOSE, FLA_ONE, D0, d1, FLA_ZERO, t01 );
00116       FLA_C2F( sgemv )( &trans,
00117                         &m_D, &mn_behind,
00118                         buff_1,
00119                         D0, &ldim_D,
00120                         d1, &inc_one,
00121                         buff_0,
00122                         t01, &inc_one );
00123     }
00124 
00125     if ( i < m_UT - 1 )
00126     {
00127       // FLA_Apply_househ2_UT( tau11, d1, u12t,
00128       //                                  D2 );
00129       FLA_Apply_househ2_UT_opt_float( m_D, mn_ahead,
00130                                       tau11,
00131                                       d1, inc_one,
00132                                       u12t, ldim_U,
00133                                       D2, ldim_D );
00134     }
00135 
00136     //------------------------------------------------------------//
00137 
00138   }
00139 
00140   return FLA_SUCCESS;
00141 }

FLA_Error FLA_QR_UT_UD_Accum_T_opt_var1_scomplex ( FLA_Obj  U,
FLA_Obj  D,
FLA_Obj  T 
)

References cgemv(), FLA_Apply_househ2_UT_opt_scomplex(), FLA_Househ2_UT_opt_scomplex(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_ONE, and FLA_ZERO.

Referenced by FLA_QR_UT_UD_Accum_T_opt_var1().

00222 {
00223   scomplex* buff_U  = FLA_COMPLEX_PTR( U );
00224   scomplex* buff_D  = FLA_COMPLEX_PTR( D );
00225   scomplex* buff_T  = FLA_COMPLEX_PTR( T );
00226   scomplex* buff_1  = FLA_COMPLEX_PTR( FLA_ONE );
00227   scomplex* buff_0  = FLA_COMPLEX_PTR( FLA_ZERO );
00228 
00229   int       m_UT    = FLA_Obj_length( U );
00230   int       m_D     = FLA_Obj_length( D );
00231   int       ldim_U  = FLA_Obj_ldim( U );
00232   int       ldim_D  = FLA_Obj_ldim( D );
00233   int       ldim_T  = FLA_Obj_ldim( T );
00234  
00235   char      trans   = 'C';
00236   int       inc_one = 1;
00237   int       i;
00238 
00239   for ( i = 0; i < m_UT; ++i )
00240   {
00241     scomplex* upsilon11 = buff_U + (i  )*ldim_U + i;
00242     scomplex* u12t      = buff_U + (i+1)*ldim_U + i;
00243 
00244     scomplex* D0        = buff_D + (0  )*ldim_D;
00245     scomplex* d1        = buff_D + (i  )*ldim_D;
00246     scomplex* D2        = buff_D + (i+1)*ldim_D;
00247 
00248     scomplex* tau11     = buff_T + (i  )*ldim_T + i;
00249     scomplex* t01       = buff_T + (i  )*ldim_T;
00250 
00251     int       mn_ahead  = m_UT - i - 1;
00252     int       mn_behind = i;
00253 
00254     //------------------------------------------------------------//
00255 
00256     // FLA_Househ2_UT( upsilon11,
00257     //                 d1, tau11 );
00258     FLA_Househ2_UT_opt_scomplex( m_D,
00259                                  upsilon11,
00260                                  d1, inc_one,
00261                                  tau11 );
00262 
00263     if ( i > 0 )
00264     {
00265       // FLA_Gemv_external( FLA_CONJ_TRANSPOSE, FLA_ONE, D0, d1, FLA_ZERO, t01 );
00266       FLA_C2F( cgemv )( &trans,
00267                         &m_D, &mn_behind,
00268                         buff_1,
00269                         D0, &ldim_D,
00270                         d1, &inc_one,
00271                         buff_0,
00272                         t01, &inc_one );
00273     }
00274 
00275     if ( i < m_UT - 1 )
00276     {
00277       // FLA_Apply_househ2_UT( tau11, d1, u12t,
00278       //                                  D2 );
00279       FLA_Apply_househ2_UT_opt_scomplex( m_D, mn_ahead,
00280                                          tau11,
00281                                          d1, inc_one,
00282                                          u12t, ldim_U,
00283                                          D2, ldim_D );
00284     }
00285 
00286     //------------------------------------------------------------//
00287 
00288   }
00289 
00290   return FLA_SUCCESS;
00291 }


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