libflame
revision_anchor
|
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