libflame  revision_anchor
FLA_util_lapack_prototypes.h
Go to the documentation of this file.
00001 /*
00002    libflame
00003    An object-based infrastructure for developing high-performance
00004    dense linear algebra libraries.
00005 
00006    Copyright (C) 2011, The University of Texas
00007 
00008    libflame is free software; you can redistribute it and/or modify
00009    it under the terms of the GNU Lesser General Public License as
00010    published by the Free Software Foundation; either version 2.1 of
00011    the License, or (at your option) any later version.
00012 
00013    libflame is distributed in the hope that it will be useful, but
00014    WITHOUT ANY WARRANTY; without even the implied warranty of
00015    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00016    Lesser General Public License for more details.
00017 
00018    You should have received a copy of the GNU Lesser General Public
00019    License along with libflame; if you did not receive a copy, see
00020    http://www.gnu.org/licenses/.
00021 
00022    For more information, please contact us at flame@cs.utexas.edu or
00023    send mail to:
00024 
00025    Field G. Van Zee and/or
00026    Robert A. van de Geijn
00027    The University of Texas at Austin
00028    Department of Computer Sciences
00029    1 University Station C0500
00030    Austin TX 78712
00031 */
00032 
00033 // --- LAPACK-related utility prototypes ---------------------------------------
00034 
00035 FLA_Error FLA_Househ2_UT( FLA_Side side, FLA_Obj chi_1, FLA_Obj x2, FLA_Obj tau );
00036 FLA_Error FLA_Househ2_UT_l_ops( int m_x2,
00037                                 float* chi_1,
00038                                 float* x2, int inc_x2,
00039                                 float* tau );
00040 FLA_Error FLA_Househ2_UT_l_opd( int m_x2,
00041                                 double* chi_1,
00042                                 double* x2, int inc_x2,
00043                                 double* tau );
00044 FLA_Error FLA_Househ2_UT_l_opc( int m_x2,
00045                                 scomplex* chi_1,
00046                                 scomplex* x2, int inc_x2,
00047                                 scomplex* tau );
00048 FLA_Error FLA_Househ2_UT_l_opz( int m_x2,
00049                                 dcomplex* chi_1,
00050                                 dcomplex* x2, int inc_x2,
00051                                 dcomplex* tau );
00052 FLA_Error FLA_Househ2_UT_r_ops( int m_x2,
00053                                 float* chi_1,
00054                                 float* x2, int inc_x2,
00055                                 float* tau );
00056 FLA_Error FLA_Househ2_UT_r_opd( int m_x2,
00057                                 double* chi_1,
00058                                 double* x2, int inc_x2,
00059                                 double* tau );
00060 FLA_Error FLA_Househ2_UT_r_opc( int m_x2,
00061                                 scomplex* chi_1,
00062                                 scomplex* x2, int inc_x2,
00063                                 scomplex* tau );
00064 FLA_Error FLA_Househ2_UT_r_opz( int m_x2,
00065                                 dcomplex* chi_1,
00066                                 dcomplex* x2, int inc_x2,
00067                                 dcomplex* tau );
00068 
00069 FLA_Error FLA_Househ3UD_UT( FLA_Obj chi_1, FLA_Obj x2, FLA_Obj y2, FLA_Obj tau );
00070 FLA_Error FLA_Househ3UD_UT_ops( int m_x2,
00071                                 int m_y2,
00072                                 float* chi_1,
00073                                 float* x2, int inc_x2,
00074                                 float* y2, int inc_y2,
00075                                 float* tau );
00076 FLA_Error FLA_Househ3UD_UT_opd( int m_x2,
00077                                 int m_y2,
00078                                 double* chi_1,
00079                                 double* x2, int inc_x2,
00080                                 double* y2, int inc_y2,
00081                                 double* tau );
00082 FLA_Error FLA_Househ3UD_UT_opc( int m_x2,
00083                                 int m_y2,
00084                                 scomplex* chi_1,
00085                                 scomplex* x2, int inc_x2,
00086                                 scomplex* y2, int inc_y2,
00087                                 scomplex* tau );
00088 FLA_Error FLA_Househ3UD_UT_opz( int m_x2,
00089                                 int m_y2,
00090                                 dcomplex* chi_1,
00091                                 dcomplex* x2, int inc_x2,
00092                                 dcomplex* y2, int inc_y2,
00093                                 dcomplex* tau );
00094 
00095 FLA_Error FLA_Househ2s_UT( FLA_Side side, FLA_Obj chi_1, FLA_Obj x2, FLA_Obj alpha, FLA_Obj chi_1_minus_alpha, FLA_Obj tau );
00096 FLA_Error FLA_Househ2s_UT_l_ops( int    m_x2,
00097                                  float* chi_1,
00098                                  float* x2, int inc_x2,
00099                                  float* alpha,
00100                                  float* chi_1_minus_alpha,
00101                                  float* tau );
00102 FLA_Error FLA_Househ2s_UT_l_opd( int     m_x2,
00103                                  double* chi_1,
00104                                  double* x2, int inc_x2,
00105                                  double* alpha,
00106                                  double* chi_1_minus_alpha,
00107                                  double* tau );
00108 FLA_Error FLA_Househ2s_UT_l_opc( int       m_x2,
00109                                  scomplex* chi_1,
00110                                  scomplex* x2, int inc_x2,
00111                                  scomplex* alpha,
00112                                  scomplex* chi_1_minus_alpha,
00113                                  scomplex* tau );
00114 FLA_Error FLA_Househ2s_UT_l_opz( int       m_x2,
00115                                  dcomplex* chi_1,
00116                                  dcomplex* x2, int inc_x2,
00117                                  dcomplex* alpha,
00118                                  dcomplex* chi_1_minus_alpha,
00119                                  dcomplex* tau );
00120 FLA_Error FLA_Househ2s_UT_r_ops( int    m_x2,
00121                                  float* chi_1,
00122                                  float* x2, int inc_x2,
00123                                  float* alpha,
00124                                  float* chi_1_minus_alpha,
00125                                  float* tau );
00126 FLA_Error FLA_Househ2s_UT_r_opd( int     m_x2,
00127                                  double* chi_1,
00128                                  double* x2, int inc_x2,
00129                                  double* alpha,
00130                                  double* chi_1_minus_alpha,
00131                                  double* tau );
00132 FLA_Error FLA_Househ2s_UT_r_opc( int       m_x2,
00133                                  scomplex* chi_1,
00134                                  scomplex* x2, int inc_x2,
00135                                  scomplex* alpha,
00136                                  scomplex* chi_1_minus_alpha,
00137                                  scomplex* tau );
00138 FLA_Error FLA_Househ2s_UT_r_opz( int       m_x2,
00139                                  dcomplex* chi_1,
00140                                  dcomplex* x2, int inc_x2,
00141                                  dcomplex* alpha,
00142                                  dcomplex* chi_1_minus_alpha,
00143                                  dcomplex* tau );
00144 
00145 FLA_Error FLA_Hev_2x2( FLA_Obj alpha11, FLA_Obj alpha21, FLA_Obj alpha22,
00146                        FLA_Obj lambda1, FLA_Obj lambda2 );
00147 FLA_Error FLA_Hev_2x2_ops( float*    buff_alpha11,
00148                            float*    buff_alpha21,
00149                            float*    buff_alpha22,
00150                            float*    buff_lambda1,
00151                            float*    buff_lambda2 );
00152 FLA_Error FLA_Hev_2x2_opd( double*   buff_alpha11,
00153                            double*   buff_alpha21,
00154                            double*   buff_alpha22,
00155                            double*   buff_lambda1,
00156                            double*   buff_lambda2 );
00157 
00158 FLA_Error FLA_Hevv_2x2( FLA_Obj alpha11, FLA_Obj alpha21, FLA_Obj alpha22,
00159                         FLA_Obj lambda1, FLA_Obj lambda2,
00160                         FLA_Obj gamma1,  FLA_Obj sigma1 );
00161 FLA_Error FLA_Hevv_2x2_ops( float*    alpha11,
00162                             float*    alpha21,
00163                             float*    alpha22,
00164                             float*    lambda1,
00165                             float*    lambda2,
00166                             float*    gamma1,
00167                             float*    sigma1 );
00168 FLA_Error FLA_Hevv_2x2_opd( double*   alpha11,
00169                             double*   alpha21,
00170                             double*   alpha22,
00171                             double*   lambda1,
00172                             double*   lambda2,
00173                             double*   gamma1,
00174                             double*   sigma1 );
00175 FLA_Error FLA_Hevv_2x2_opc( scomplex* alpha11,
00176                             scomplex* alpha21,
00177                             scomplex* alpha22,
00178                             float*    lambda1,
00179                             float*    lambda2,
00180                             float*    gamma1,
00181                             scomplex* sigma1 );
00182 FLA_Error FLA_Hevv_2x2_opz( dcomplex* alpha11,
00183                             dcomplex* alpha21,
00184                             dcomplex* alpha22,
00185                             double*   lambda1,
00186                             double*   lambda2,
00187                             double*   gamma1,
00188                             dcomplex* sigma1 );
00189 
00190 FLA_Error FLA_Wilkshift_tridiag( FLA_Obj delta1, FLA_Obj epsilon, FLA_Obj delta2, FLA_Obj kappa );
00191 FLA_Error FLA_Wilkshift_tridiag_ops( float   delta1,
00192                                      float   epsilon,
00193                                      float   delta2,
00194                                      float*  kappa );
00195 FLA_Error FLA_Wilkshift_tridiag_opd( double  delta1,
00196                                      double  epsilon,
00197                                      double  delta2,
00198                                      double* kappa );
00199 
00200 FLA_Error FLA_Pythag2( FLA_Obj chi, FLA_Obj psi, FLA_Obj rho );
00201 FLA_Error FLA_Pythag2_ops( float*    chi,
00202                            float*    psi,
00203                            float*    rho );
00204 FLA_Error FLA_Pythag2_opd( double*   chi,
00205                            double*   psi,
00206                            double*   rho );
00207 
00208 FLA_Error FLA_Pythag3( FLA_Obj chi, FLA_Obj psi, FLA_Obj zeta, FLA_Obj rho );
00209 FLA_Error FLA_Pythag3_ops( float*    chi,
00210                            float*    psi,
00211                            float*    zeta,
00212                            float*    rho );
00213 FLA_Error FLA_Pythag3_opd( double*   chi,
00214                            double*   psi,
00215                            double*   zeta,
00216                            double*   rho );
00217 
00218 FLA_Error FLA_Sort_evd( FLA_Direct direct, FLA_Obj l, FLA_Obj V );
00219 FLA_Error FLA_Sort_evd_f_ops( int       m_A,
00220                               float*    l, int inc_l,
00221                               float*    V, int rs_V, int cs_V );
00222 FLA_Error FLA_Sort_evd_b_ops( int       m_A,
00223                               float*    l, int inc_l,
00224                               float*    V, int rs_V, int cs_V );
00225 FLA_Error FLA_Sort_evd_f_opd( int       m_A,
00226                               double*   l, int inc_l,
00227                               double*   V, int rs_V, int cs_V );
00228 FLA_Error FLA_Sort_evd_b_opd( int       m_A,
00229                               double*   l, int inc_l,
00230                               double*   V, int rs_V, int cs_V );
00231 FLA_Error FLA_Sort_evd_f_opc( int       m_A,
00232                               float*    l, int inc_l,
00233                               scomplex* V, int rs_V, int cs_V );
00234 FLA_Error FLA_Sort_evd_b_opc( int       m_A,
00235                               float*    l, int inc_l,
00236                               scomplex* V, int rs_V, int cs_V );
00237 FLA_Error FLA_Sort_evd_f_opz( int       m_A,
00238                               double*   l, int inc_l,
00239                               dcomplex* V, int rs_V, int cs_V );
00240 FLA_Error FLA_Sort_evd_b_opz( int       m_A,
00241                               double*   l, int inc_l,
00242                               dcomplex* V, int rs_V, int cs_V );
00243 
00244 FLA_Error FLA_Sort_svd( FLA_Direct direct, FLA_Obj s, FLA_Obj U, FLA_Obj V );
00245 FLA_Error FLA_Sort_svd_f_ops( int       m_U,
00246                               int       n_V,
00247                               float*    s, int inc_s,
00248                               float*    U, int rs_U, int cs_U,
00249                               float*    V, int rs_V, int cs_V );
00250 FLA_Error FLA_Sort_svd_b_ops( int       m_U,
00251                               int       n_V,
00252                               float*    s, int inc_s,
00253                               float*    U, int rs_U, int cs_U,
00254                               float*    V, int rs_V, int cs_V );
00255 FLA_Error FLA_Sort_svd_f_opd( int       m_U,
00256                               int       n_V,
00257                               double*   s, int inc_s,
00258                               double*   U, int rs_U, int cs_U,
00259                               double*   V, int rs_V, int cs_V );
00260 FLA_Error FLA_Sort_svd_b_opd( int       m_U,
00261                               int       n_V,
00262                               double*   s, int inc_s,
00263                               double*   U, int rs_U, int cs_U,
00264                               double*   V, int rs_V, int cs_V );
00265 FLA_Error FLA_Sort_svd_f_opc( int       m_U,
00266                               int       n_V,
00267                               float*    s, int inc_s,
00268                               scomplex* U, int rs_U, int cs_U,
00269                               scomplex* V, int rs_V, int cs_V );
00270 FLA_Error FLA_Sort_svd_b_opc( int       m_U,
00271                               int       n_V,
00272                               float*    s, int inc_s,
00273                               scomplex* U, int rs_U, int cs_U,
00274                               scomplex* V, int rs_V, int cs_V );
00275 FLA_Error FLA_Sort_svd_f_opz( int       m_U,
00276                               int       n_V,
00277                               double*   s, int inc_s,
00278                               dcomplex* U, int rs_U, int cs_U,
00279                               dcomplex* V, int rs_V, int cs_V );
00280 FLA_Error FLA_Sort_svd_b_opz( int       m_U,
00281                               int       n_V,
00282                               double*   s, int inc_s,
00283                               dcomplex* U, int rs_U, int cs_U,
00284                               dcomplex* V, int rs_V, int cs_V );
00285 
00286 FLA_Error FLA_Sv_2x2( FLA_Obj alpha11, FLA_Obj alpha12, FLA_Obj alpha22,
00287                       FLA_Obj sigma1, FLA_Obj sigma2 );
00288 FLA_Error FLA_Sv_2x2_ops( float*    alpha11,
00289                           float*    alpha12,
00290                           float*    alpha22,
00291                           float*    sigma1,
00292                           float*    sigma2 );
00293 FLA_Error FLA_Sv_2x2_opd( double*   alpha11,
00294                           double*   alpha12,
00295                           double*   alpha22,
00296                           double*   sigma1,
00297                           double*   sigma2 );
00298 
00299 FLA_Error FLA_Svv_2x2( FLA_Obj alpha11, FLA_Obj alpha12, FLA_Obj alpha22,
00300                        FLA_Obj sigma1, FLA_Obj sigma2,
00301                        FLA_Obj gammaL, FLA_Obj sigmaL,
00302                        FLA_Obj gammaR, FLA_Obj sigmaR );
00303 FLA_Error FLA_Svv_2x2_ops( float*    alpha11,
00304                            float*    alpha12,
00305                            float*    alpha22,
00306                            float*    sigma1,
00307                            float*    sigma2,
00308                            float*    gammaL,
00309                            float*    sigmaL,
00310                            float*    gammaR,
00311                            float*    sigmaR );
00312 FLA_Error FLA_Svv_2x2_opd( double*   alpha11,
00313                            double*   alpha12,
00314                            double*   alpha22,
00315                            double*   sigma1,
00316                            double*   sigma2,
00317                            double*   gammaL,
00318                            double*   sigmaL,
00319                            double*   gammaR,
00320                            double*   sigmaR );
00321 
00322 FLA_Error FLA_Mach_params( FLA_Machval machval, FLA_Obj val );
00323 float     FLA_Mach_params_ops( FLA_Machval machval );
00324 double    FLA_Mach_params_opd( FLA_Machval machval );
00325 
00326 FLA_Error FLA_Apply_diag_matrix( FLA_Side side, FLA_Conj conj, FLA_Obj x, FLA_Obj A );
00327 FLA_Error FLA_Shift_pivots_to( FLA_Pivot_type ptype, FLA_Obj p );
00328 FLA_Error FLA_Form_perm_matrix( FLA_Obj p, FLA_Obj A );
00329 FLA_Error FLA_LU_find_zero_on_diagonal( FLA_Obj A );
00330 
00331 // --- f2c-converted routine prototypes ----------------------------------------
00332 
00333 doublereal fla_dlamch( char* cmach, ftnlen cmach_len );
00334 real       fla_slamch( char* cmach, ftnlen cmach_len );
00335 logical    fla_lsame( char* ca, char* cb, ftnlen ca_len, ftnlen cb_len );
00336 double     fla_pow_di( doublereal* a, integer* n );
00337 real       fla_pow_ri( real* a, integer* n );
00338 
00339 // --- LAPACK-related utility check routine prototypes -------------------------
00340 
00341 FLA_Error FLA_Househ2_UT_check( FLA_Side side, FLA_Obj chi_1, FLA_Obj x2, FLA_Obj tau );
00342 FLA_Error FLA_Househ3UD_UT_check( FLA_Obj chi_1, FLA_Obj x2, FLA_Obj y2, FLA_Obj tau );
00343 FLA_Error FLA_Househ2s_UT_check( FLA_Side side, FLA_Obj chi_1, FLA_Obj x2, FLA_Obj alpha, FLA_Obj chi_1_minus_alpha, FLA_Obj tau );
00344 
00345 FLA_Error FLA_Givens2_check( FLA_Obj chi_1, FLA_Obj chi_2, FLA_Obj gamma, FLA_Obj sigma, FLA_Obj chi_1_new );
00346 FLA_Error FLA_Apply_GTG_check( FLA_Obj gamma, FLA_Obj sigma, FLA_Obj delta1, FLA_Obj epsilon1, FLA_Obj delta2 );
00347 FLA_Error FLA_Apply_G_1x2_check( FLA_Obj gamma, FLA_Obj sigma, FLA_Obj beta, FLA_Obj epsilon );
00348 FLA_Error FLA_Apply_G_mx2_check( FLA_Obj gamma, FLA_Obj sigma, FLA_Obj a1, FLA_Obj a2 );
00349 FLA_Error FLA_Apply_G_check( FLA_Side side, FLA_Direct direct, FLA_Obj G, FLA_Obj A );
00350 FLA_Error FLA_Wilkshift_tridiag_check( FLA_Obj delta1, FLA_Obj epsilon, FLA_Obj delta2, FLA_Obj kappa );
00351 FLA_Error FLA_Wilkshift_bidiag_check( FLA_Obj epsilon1, FLA_Obj delta1, FLA_Obj epsilon2, FLA_Obj delta2, FLA_Obj kappa );
00352 FLA_Error FLA_Introduce_bulge_check( FLA_Obj shift, FLA_Obj gamma, FLA_Obj sigma, FLA_Obj delta1, FLA_Obj epsilon1, FLA_Obj delta2, FLA_Obj beta, FLA_Obj epsilon2 );
00353 FLA_Error FLA_Mach_params_check( FLA_Machval machval, FLA_Obj val );
00354 
00355 FLA_Error FLA_Sort_evd_check( FLA_Direct direct, FLA_Obj l, FLA_Obj V );
00356 FLA_Error FLA_Sort_svd_check( FLA_Direct direct, FLA_Obj s, FLA_Obj U, FLA_Obj V );
00357 
00358 FLA_Error FLA_Apply_diag_matrix_check( FLA_Side side, FLA_Conj conj, FLA_Obj x, FLA_Obj A );
00359 FLA_Error FLA_Shift_pivots_to_check( FLA_Pivot_type ptype, FLA_Obj p );
00360 FLA_Error FLA_Form_perm_matrix_check( FLA_Obj p, FLA_Obj A );
00361 FLA_Error FLA_LU_find_zero_on_diagonal_check( FLA_Obj A );
00362