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 // --- Name-mangling macro definitions ----------------------------------------- 00034 00035 // --- Define Fortran name-mangling macro -------------------------- 00036 00037 #define F77_spotrf F77_FUNC( spotrf , SPOTRF ) 00038 #define F77_dpotrf F77_FUNC( dpotrf , DPOTRF ) 00039 #define F77_cpotrf F77_FUNC( cpotrf , CPOTRF ) 00040 #define F77_zpotrf F77_FUNC( zpotrf , ZPOTRF ) 00041 00042 #define F77_spotf2 F77_FUNC( spotf2 , SPOTF2 ) 00043 #define F77_dpotf2 F77_FUNC( dpotf2 , DPOTF2 ) 00044 #define F77_cpotf2 F77_FUNC( cpotf2 , CPOTF2 ) 00045 #define F77_zpotf2 F77_FUNC( zpotf2 , ZPOTF2 ) 00046 00047 00048 #define F77_sgetrf F77_FUNC( sgetrf , SGETRF ) 00049 #define F77_dgetrf F77_FUNC( dgetrf , DGETRF ) 00050 #define F77_cgetrf F77_FUNC( cgetrf , CGETRF ) 00051 #define F77_zgetrf F77_FUNC( zgetrf , ZGETRF ) 00052 00053 #define F77_sgetf2 F77_FUNC( sgetf2 , SGETF2 ) 00054 #define F77_dgetf2 F77_FUNC( dgetf2 , DGETF2 ) 00055 #define F77_cgetf2 F77_FUNC( cgetf2 , CGETF2 ) 00056 #define F77_zgetf2 F77_FUNC( zgetf2 , ZGETF2 ) 00057 00058 00059 #define F77_sgeqrf F77_FUNC( sgeqrf , SGEQRF ) 00060 #define F77_dgeqrf F77_FUNC( dgeqrf , DGEQRF ) 00061 #define F77_cgeqrf F77_FUNC( cgeqrf , CGEQRF ) 00062 #define F77_zgeqrf F77_FUNC( zgeqrf , ZGEQRF ) 00063 00064 #define F77_sgeqr2 F77_FUNC( sgeqr2 , SGEQR2 ) 00065 #define F77_dgeqr2 F77_FUNC( dgeqr2 , DGEQR2 ) 00066 #define F77_cgeqr2 F77_FUNC( cgeqr2 , CGEQR2 ) 00067 #define F77_zgeqr2 F77_FUNC( zgeqr2 , ZGEQR2 ) 00068 00069 00070 #define F77_sgelqf F77_FUNC( sgelqf , SGELQF ) 00071 #define F77_dgelqf F77_FUNC( dgelqf , DGELQF ) 00072 #define F77_cgelqf F77_FUNC( cgelqf , CGELQF ) 00073 #define F77_zgelqf F77_FUNC( zgelqf , ZGELQF ) 00074 00075 #define F77_sgelq2 F77_FUNC( sgelq2 , SGELQ2 ) 00076 #define F77_dgelq2 F77_FUNC( dgelq2 , DGELQ2 ) 00077 #define F77_cgelq2 F77_FUNC( cgelq2 , CGELQ2 ) 00078 #define F77_zgelq2 F77_FUNC( zgelq2 , ZGELQ2 ) 00079 00080 00081 #define F77_slauum F77_FUNC( slauum , SLAUUM ) 00082 #define F77_dlauum F77_FUNC( dlauum , DLAUUM ) 00083 #define F77_clauum F77_FUNC( clauum , CLAUUM ) 00084 #define F77_zlauum F77_FUNC( zlauum , ZLAUUM ) 00085 00086 #define F77_slauu2 F77_FUNC( slauu2 , SLAUU2 ) 00087 #define F77_dlauu2 F77_FUNC( dlauu2 , DLAUU2 ) 00088 #define F77_clauu2 F77_FUNC( clauu2 , CLAUU2 ) 00089 #define F77_zlauu2 F77_FUNC( zlauu2 , ZLAUU2 ) 00090 00091 00092 #define F77_strtri F77_FUNC( strtri , STRTRI ) 00093 #define F77_dtrtri F77_FUNC( dtrtri , DTRTRI ) 00094 #define F77_ctrtri F77_FUNC( ctrtri , CTRTRI ) 00095 #define F77_ztrtri F77_FUNC( ztrtri , ZTRTRI ) 00096 00097 #define F77_strti2 F77_FUNC( strti2 , STRTI2 ) 00098 #define F77_dtrti2 F77_FUNC( dtrti2 , DTRTI2 ) 00099 #define F77_ctrti2 F77_FUNC( ctrti2 , CTRTI2 ) 00100 #define F77_ztrti2 F77_FUNC( ztrti2 , ZTRTI2 ) 00101 00102 00103 #define F77_strsyl F77_FUNC( strsyl , STRSYL ) 00104 #define F77_dtrsyl F77_FUNC( dtrsyl , DTRSYL ) 00105 #define F77_ctrsyl F77_FUNC( ctrsyl , CTRSYL ) 00106 #define F77_ztrsyl F77_FUNC( ztrsyl , ZTRSYL ) 00107 00108 00109 #define F77_sgehrd F77_FUNC( sgehrd , SGEHRD ) 00110 #define F77_dgehrd F77_FUNC( dgehrd , DGEHRD ) 00111 #define F77_cgehrd F77_FUNC( cgehrd , CGEHRD ) 00112 #define F77_zgehrd F77_FUNC( zgehrd , ZGEHRD ) 00113 00114 #define F77_sgehd2 F77_FUNC( sgehd2 , SGEHD2 ) 00115 #define F77_dgehd2 F77_FUNC( dgehd2 , DGEHD2 ) 00116 #define F77_cgehd2 F77_FUNC( cgehd2 , CGEHD2 ) 00117 #define F77_zgehd2 F77_FUNC( zgehd2 , ZGEHD2 ) 00118 00119 00120 #define F77_ssytrd F77_FUNC( ssytrd , SSYTRD ) 00121 #define F77_dsytrd F77_FUNC( dsytrd , DSYTRD ) 00122 #define F77_chetrd F77_FUNC( chetrd , CHETRD ) 00123 #define F77_zhetrd F77_FUNC( zhetrd , ZHETRD ) 00124 00125 #define F77_ssytd2 F77_FUNC( ssytd2 , SSYTD2 ) 00126 #define F77_dsytd2 F77_FUNC( dsytd2 , DSYTD2 ) 00127 #define F77_chetd2 F77_FUNC( chetd2 , CHETD2 ) 00128 #define F77_zhetd2 F77_FUNC( zhetd2 , ZHETD2 ) 00129 00130 00131 #define F77_sgebrd F77_FUNC( sgebrd , SGEBRD ) 00132 #define F77_dgebrd F77_FUNC( dgebrd , DGEBRD ) 00133 #define F77_cgebrd F77_FUNC( cgebrd , CGEBRD ) 00134 #define F77_zgebrd F77_FUNC( zgebrd , ZGEBRD ) 00135 00136 #define F77_sgebd2 F77_FUNC( sgebd2 , SGEBD2 ) 00137 #define F77_dgebd2 F77_FUNC( dgebd2 , DGEBD2 ) 00138 #define F77_cgebd2 F77_FUNC( cgebd2 , CGEBD2 ) 00139 #define F77_zgebd2 F77_FUNC( zgebd2 , ZGEBD2 ) 00140 00141 00142 #define F77_ssygst F77_FUNC( ssygst , SSYGST ) 00143 #define F77_dsygst F77_FUNC( dsygst , DSYGST ) 00144 #define F77_chegst F77_FUNC( chegst , CHEGST ) 00145 #define F77_zhegst F77_FUNC( zhegst , ZHEGST ) 00146 00147 #define F77_ssygs2 F77_FUNC( ssygs2 , SSYGS2 ) 00148 #define F77_dsygs2 F77_FUNC( dsygs2 , DSYGS2 ) 00149 #define F77_chegs2 F77_FUNC( chegs2 , CHEGS2 ) 00150 #define F77_zhegs2 F77_FUNC( zhegs2 , ZHEGS2 ) 00151 00152 00153 #define F77_slarft F77_FUNC( slarft , SLARFT ) 00154 #define F77_dlarft F77_FUNC( dlarft , DLARFT ) 00155 #define F77_clarft F77_FUNC( clarft , CLARFT ) 00156 #define F77_zlarft F77_FUNC( zlarft , ZLARFT ) 00157 00158 00159 #define F77_slarfg F77_FUNC( slarfg , SLARFG ) 00160 #define F77_dlarfg F77_FUNC( dlarfg , DLARFG ) 00161 #define F77_clarfg F77_FUNC( clarfg , CLARFG ) 00162 #define F77_zlarfg F77_FUNC( zlarfg , ZLARFG ) 00163 00164 00165 #define F77_sorgqr F77_FUNC( sorgqr , SORGQR ) 00166 #define F77_dorgqr F77_FUNC( dorgqr , DORGQR ) 00167 #define F77_cungqr F77_FUNC( cungqr , CUNGQR ) 00168 #define F77_zungqr F77_FUNC( zungqr , ZUNGQR ) 00169 00170 00171 #define F77_sormqr F77_FUNC( sormqr , SORMQR ) 00172 #define F77_dormqr F77_FUNC( dormqr , DORMQR ) 00173 #define F77_cunmqr F77_FUNC( cunmqr , CUNMQR ) 00174 #define F77_zunmqr F77_FUNC( zunmqr , ZUNMQR ) 00175 00176 #define F77_sorm2r F77_FUNC( sorm2r , SORM2R ) 00177 #define F77_dorm2r F77_FUNC( dorm2r , DORM2R ) 00178 #define F77_cunm2r F77_FUNC( cunm2r , CUNM2R ) 00179 #define F77_zunm2r F77_FUNC( zunm2r , ZUNM2R ) 00180 00181 00182 #define F77_sormlq F77_FUNC( sormlq , SORMLQ ) 00183 #define F77_dormlq F77_FUNC( dormlq , DORMLQ ) 00184 #define F77_cunmlq F77_FUNC( cunmlq , CUNMLQ ) 00185 #define F77_zunmlq F77_FUNC( zunmlq , ZUNMLQ ) 00186 00187 #define F77_sorml2 F77_FUNC( sorml2 , SORML2 ) 00188 #define F77_dorml2 F77_FUNC( dorml2 , DORML2 ) 00189 #define F77_cunml2 F77_FUNC( cunml2 , CUNML2 ) 00190 #define F77_zunml2 F77_FUNC( zunml2 , ZUNML2 ) 00191 00192 00193 #define F77_sorgtr F77_FUNC( sorgtr , SORGTR ) 00194 #define F77_dorgtr F77_FUNC( dorgtr , DORGTR ) 00195 #define F77_cungtr F77_FUNC( cungtr , CUNGTR ) 00196 #define F77_zungtr F77_FUNC( zungtr , ZUNGTR ) 00197 00198 00199 #define F77_sormtr F77_FUNC( sormtr , SORMTR ) 00200 #define F77_dormtr F77_FUNC( dormtr , DORMTR ) 00201 #define F77_cunmtr F77_FUNC( cunmtr , CUNMTR ) 00202 #define F77_zunmtr F77_FUNC( zunmtr , ZUNMTR ) 00203 00204 00205 #define F77_sorgbr F77_FUNC( sorgbr , SORGBR ) 00206 #define F77_dorgbr F77_FUNC( dorgbr , DORGBR ) 00207 #define F77_cungbr F77_FUNC( cungbr , CUNGBR ) 00208 #define F77_zungbr F77_FUNC( zungbr , ZUNGBR ) 00209 00210 00211 #define F77_sormbr F77_FUNC( sormbr , SORMBR ) 00212 #define F77_dormbr F77_FUNC( dormbr , DORMBR ) 00213 #define F77_cunmbr F77_FUNC( cunmbr , CUNMBR ) 00214 #define F77_zunmbr F77_FUNC( zunmbr , ZUNMBR ) 00215 00216 00217 #define F77_ssteqr F77_FUNC( ssteqr , SSTEQR ) 00218 #define F77_dsteqr F77_FUNC( dsteqr , DSTEQR ) 00219 #define F77_csteqr F77_FUNC( csteqr , CSTEQR ) 00220 #define F77_zsteqr F77_FUNC( zsteqr , ZSTEQR ) 00221 00222 00223 #define F77_sstedc F77_FUNC( sstedc , SSTEDC ) 00224 #define F77_dstedc F77_FUNC( dstedc , DSTEDC ) 00225 #define F77_cstedc F77_FUNC( cstedc , CSTEDC ) 00226 #define F77_zstedc F77_FUNC( zstedc , ZSTEDC ) 00227 00228 00229 #define F77_sstemr F77_FUNC( sstemr , SSTEMR ) 00230 #define F77_dstemr F77_FUNC( dstemr , DSTEMR ) 00231 #define F77_cstemr F77_FUNC( cstemr , CSTEMR ) 00232 #define F77_zstemr F77_FUNC( zstemr , ZSTEMR ) 00233 00234 00235 #define F77_ssyev F77_FUNC( ssyev , SSYEV ) 00236 #define F77_dsyev F77_FUNC( dsyev , DSYEV ) 00237 #define F77_cheev F77_FUNC( cheev , CHEEV ) 00238 #define F77_zheev F77_FUNC( zheev , ZHEEV ) 00239 00240 00241 #define F77_ssyevd F77_FUNC( ssyevd , SSYEVD ) 00242 #define F77_dsyevd F77_FUNC( dsyevd , DSYEVD ) 00243 #define F77_cheevd F77_FUNC( cheevd , CHEEVD ) 00244 #define F77_zheevd F77_FUNC( zheevd , ZHEEVD ) 00245 00246 00247 #define F77_ssyevr F77_FUNC( ssyevr , SSYEVR ) 00248 #define F77_dsyevr F77_FUNC( dsyevr , DSYEVR ) 00249 #define F77_cheevr F77_FUNC( cheevr , CHEEVR ) 00250 #define F77_zheevr F77_FUNC( zheevr , ZHEEVR ) 00251 00252 00253 #define F77_sbdsqr F77_FUNC( sbdsqr , SBDSQR ) 00254 #define F77_dbdsqr F77_FUNC( dbdsqr , DBDSQR ) 00255 #define F77_cbdsqr F77_FUNC( cbdsqr , CBDSQR ) 00256 #define F77_zbdsqr F77_FUNC( zbdsqr , ZBDSQR ) 00257 00258 00259 #define F77_sbdsdc F77_FUNC( sbdsdc , SBDSDC ) 00260 #define F77_dbdsdc F77_FUNC( dbdsdc , DBDSDC ) 00261 00262 00263 #define F77_sgesvd F77_FUNC( sgesvd , SGESVD ) 00264 #define F77_dgesvd F77_FUNC( dgesvd , DGESVD ) 00265 #define F77_cgesvd F77_FUNC( cgesvd , CGESVD ) 00266 #define F77_zgesvd F77_FUNC( zgesvd , ZGESVD ) 00267 00268 00269 #define F77_sgesdd F77_FUNC( sgesdd , SGESDD ) 00270 #define F77_dgesdd F77_FUNC( dgesdd , DGESDD ) 00271 #define F77_cgesdd F77_FUNC( cgesdd , CGESDD ) 00272 #define F77_zgesdd F77_FUNC( zgesdd , ZGESDD ) 00273 00274 00275 #define F77_slaswp F77_FUNC( slaswp , SLASWP ) 00276 #define F77_dlaswp F77_FUNC( dlaswp , DLASWP ) 00277 #define F77_claswp F77_FUNC( claswp , CLASWP ) 00278 #define F77_zlaswp F77_FUNC( zlaswp , ZLASWP ) 00279 00280 00281 #define F77_slaset F77_FUNC( slaset , SLASET ) 00282 #define F77_dlaset F77_FUNC( dlaset , DLASET ) 00283 #define F77_claset F77_FUNC( claset , CLASET ) 00284 #define F77_zlaset F77_FUNC( zlaset , ZLASET ) 00285 00286 00287 // --- Cholesky factorization --- 00288 00289 void F77_spotrf( char* uplo, int* n, float* a, int* lda, int* info ); 00290 void F77_dpotrf( char* uplo, int* n, double* a, int* lda, int* info ); 00291 void F77_cpotrf( char* uplo, int* n, scomplex* a, int* lda, int* info ); 00292 void F77_zpotrf( char* uplo, int* n, dcomplex* a, int* lda, int* info ); 00293 00294 void F77_spotf2( char* uplo, int* n, float* a, int* lda, int* info ); 00295 void F77_dpotf2( char* uplo, int* n, double* a, int* lda, int* info ); 00296 void F77_cpotf2( char* uplo, int* n, scomplex* a, int* lda, int* info ); 00297 void F77_zpotf2( char* uplo, int* n, dcomplex* a, int* lda, int* info ); 00298 00299 // --- LU factorization with partial pivoting --- 00300 00301 void F77_sgetrf( int* m, int* n, float* a, int* lda, int* ipiv, int* info ); 00302 void F77_dgetrf( int* m, int* n, double* a, int* lda, int* ipiv, int* info ); 00303 void F77_cgetrf( int* m, int* n, scomplex* a, int* lda, int* ipiv, int* info ); 00304 void F77_zgetrf( int* m, int* n, dcomplex* a, int* lda, int* ipiv, int* info ); 00305 00306 void F77_sgetf2( int* m, int* n, float* a, int* lda, int* ipiv, int* info ); 00307 void F77_dgetf2( int* m, int* n, double* a, int* lda, int* ipiv, int* info ); 00308 void F77_cgetf2( int* m, int* n, scomplex* a, int* lda, int* ipiv, int* info ); 00309 void F77_zgetf2( int* m, int* n, dcomplex* a, int* lda, int* ipiv, int* info ); 00310 00311 // --- QR factorization (classic) --- 00312 00313 void F77_sgeqrf( int* m, int* n, float* a, int* lda, float* tau, float* work, int* lwork, int* info ); 00314 void F77_dgeqrf( int* m, int* n, double* a, int* lda, double* tau, double* work, int* lwork, int* info ); 00315 void F77_cgeqrf( int* m, int* n, scomplex* a, int* lda, scomplex* tau, scomplex* work, int* lwork, int* info ); 00316 void F77_zgeqrf( int* m, int* n, dcomplex* a, int* lda, dcomplex* tau, dcomplex* work, int* lwork, int* info ); 00317 00318 void F77_sgeqr2( int* m, int* n, float* a, int* lda, float* tau, float* work, int* info ); 00319 void F77_dgeqr2( int* m, int* n, double* a, int* lda, double* tau, double* work, int* info ); 00320 void F77_cgeqr2( int* m, int* n, scomplex* a, int* lda, scomplex* tau, scomplex* work, int* info ); 00321 void F77_zgeqr2( int* m, int* n, dcomplex* a, int* lda, dcomplex* tau, dcomplex* work, int* info ); 00322 00323 // --- LQ factorization (classic) --- 00324 00325 void F77_sgelqf( int* m, int* n, float* a, int* lda, float* tau, float* work, int* lwork, int* info ); 00326 void F77_dgelqf( int* m, int* n, double* a, int* lda, double* tau, double* work, int* lwork, int* info ); 00327 void F77_cgelqf( int* m, int* n, scomplex* a, int* lda, scomplex* tau, scomplex* work, int* lwork, int* info ); 00328 void F77_zgelqf( int* m, int* n, dcomplex* a, int* lda, dcomplex* tau, dcomplex* work, int* lwork, int* info ); 00329 00330 void F77_sgelq2( int* m, int* n, float* a, int* lda, float* tau, float* work, int* info ); 00331 void F77_dgelq2( int* m, int* n, double* a, int* lda, double* tau, double* work, int* info ); 00332 void F77_cgelq2( int* m, int* n, scomplex* a, int* lda, scomplex* tau, scomplex* work, int* info ); 00333 void F77_zgelq2( int* m, int* n, dcomplex* a, int* lda, dcomplex* tau, dcomplex* work, int* info ); 00334 00335 // --- Triangular-transpose matrix multiply --- 00336 00337 void F77_slauum( char* uplo, int* n, float* a, int* lda, int* info ); 00338 void F77_dlauum( char* uplo, int* n, double* a, int* lda, int* info ); 00339 void F77_clauum( char* uplo, int* n, scomplex* a, int* lda, int* info ); 00340 void F77_zlauum( char* uplo, int* n, dcomplex* a, int* lda, int* info ); 00341 00342 void F77_slauu2( char* uplo, int* n, float* a, int* lda, int* info ); 00343 void F77_dlauu2( char* uplo, int* n, double* a, int* lda, int* info ); 00344 void F77_clauu2( char* uplo, int* n, scomplex* a, int* lda, int* info ); 00345 void F77_zlauu2( char* uplo, int* n, dcomplex* a, int* lda, int* info ); 00346 00347 // --- Triangular matrix inversion --- 00348 00349 void F77_strtri( char* uplo, char* diag, int* n, float* a, int* lda, int* info ); 00350 void F77_dtrtri( char* uplo, char* diag, int* n, double* a, int* lda, int* info ); 00351 void F77_ctrtri( char* uplo, char* diag, int* n, scomplex* a, int* lda, int* info ); 00352 void F77_ztrtri( char* uplo, char* diag, int* n, dcomplex* a, int* lda, int* info ); 00353 00354 void F77_strti2( char* uplo, char* diag, int* n, float* a, int* lda, int* info ); 00355 void F77_dtrti2( char* uplo, char* diag, int* n, double* a, int* lda, int* info ); 00356 void F77_ctrti2( char* uplo, char* diag, int* n, scomplex* a, int* lda, int* info ); 00357 void F77_ztrti2( char* uplo, char* diag, int* n, dcomplex* a, int* lda, int* info ); 00358 00359 // --- Triangular Sylvester equation solve --- 00360 00361 void F77_strsyl( char* transa, char* transb, int* isgn, int* m, int* n, float* a, int* lda, float* b, int* ldb, float* c, int* ldc, float* scale, int* info ); 00362 void F77_dtrsyl( char* transa, char* transb, int* isgn, int* m, int* n, double* a, int* lda, double* b, int* ldb, double* c, int* ldc, double* scale, int* info ); 00363 void F77_ctrsyl( char* transa, char* transb, int* isgn, int* m, int* n, scomplex* a, int* lda, scomplex* b, int* ldb, scomplex* c, int* ldc, float* scale, int* info ); 00364 void F77_ztrsyl( char* transa, char* transb, int* isgn, int* m, int* n, dcomplex* a, int* lda, dcomplex* b, int* ldb, dcomplex* c, int* ldc, double* scale, int* info ); 00365 00366 // --- Reduction to upper Hessenberg form --- 00367 00368 void F77_sgehrd( int* n, int* ilo, int* ihi, float* a, int* lda, float* tau, float* work, int* lwork, int* info ); 00369 void F77_dgehrd( int* n, int* ilo, int* ihi, double* a, int* lda, double* tau, double* work, int* lwork, int* info ); 00370 void F77_cgehrd( int* n, int* ilo, int* ihi, scomplex* a, int* lda, scomplex* tau, scomplex* work, int* lwork, int* info ); 00371 void F77_zgehrd( int* n, int* ilo, int* ihi, dcomplex* a, int* lda, dcomplex* tau, dcomplex* work, int* lwork, int* info ); 00372 00373 void F77_sgehd2( int* n, int* ilo, int* ihi, float* a, int* lda, float* tau, float* work, int* info ); 00374 void F77_dgehd2( int* n, int* ilo, int* ihi, double* a, int* lda, double* tau, double* work, int* info ); 00375 void F77_cgehd2( int* n, int* ilo, int* ihi, scomplex* a, int* lda, scomplex* tau, scomplex* work, int* info ); 00376 void F77_zgehd2( int* n, int* ilo, int* ihi, dcomplex* a, int* lda, dcomplex* tau, dcomplex* work, int* info ); 00377 00378 // --- Reduction to tridiagonal form --- 00379 00380 void F77_ssytrd( char* uplo, int* n, float* a, int* lda, float* d, float* e, float* tau, float* work, int* lwork, int* info ); 00381 void F77_dsytrd( char* uplo, int* n, double* a, int* lda, double* d, double* e, double* tau, double* work, int* lwork, int* info ); 00382 void F77_chetrd( char* uplo, int* n, scomplex* a, int* lda, float* d, float* e, scomplex* tau, scomplex* work, int* lwork, int* info ); 00383 void F77_zhetrd( char* uplo, int* n, dcomplex* a, int* lda, double* d, double* e, dcomplex* tau, dcomplex* work, int* lwork, int* info ); 00384 00385 void F77_ssytd2( char* uplo, int* n, float* a, int* lda, float* d, float* e, float* tau, int* info ); 00386 void F77_dsytd2( char* uplo, int* n, double* a, int* lda, double* d, double* e, double* tau, int* info ); 00387 void F77_chetd2( char* uplo, int* n, scomplex* a, int* lda, float* d, float* e, scomplex* tau, int* info ); 00388 void F77_zhetd2( char* uplo, int* n, dcomplex* a, int* lda, double* d, double* e, dcomplex* tau, int* info ); 00389 00390 // --- Reduction to bidiagonal form --- 00391 00392 void F77_sgebrd( int* m, int* n, float* a, int* lda, float* d, float* e, float* tauq, float* taup, float* work, int* lwork, int* info ); 00393 void F77_dgebrd( int* m, int* n, double* a, int* lda, double* d, double* e, double* tauq, double* taup, double* work, int* lwork, int* info ); 00394 void F77_cgebrd( int* m, int* n, scomplex* a, int* lda, float* d, float* e, scomplex* tauq, scomplex* taup, scomplex* work, int* lwork, int* info ); 00395 void F77_zgebrd( int* m, int* n, dcomplex* a, int* lda, double* d, double* e, dcomplex* tauq, dcomplex* taup, dcomplex* work, int* lwork, int* info ); 00396 00397 void F77_sgebd2( int* m, int* n, float* a, int* lda, float* d, float* e, float* tauq, float* taup, float* work, int* info ); 00398 void F77_dgebd2( int* m, int* n, double* a, int* lda, double* d, double* e, double* tauq, double* taup, double* work, int* info ); 00399 void F77_cgebd2( int* m, int* n, scomplex* a, int* lda, float* d, float* e, scomplex* tauq, scomplex* taup, scomplex* work, int* info ); 00400 void F77_zgebd2( int* m, int* n, dcomplex* a, int* lda, double* d, double* e, dcomplex* tauq, dcomplex* taup, dcomplex* work, int* info ); 00401 00402 // --- Reduce Hermitian-definite generalized eigenproblem to standard form --- 00403 00404 void F77_ssygst( int* itype, char* uplo, int* n, float* a, int* lda, float* b, int* ldb, int* info ); 00405 void F77_dsygst( int* itype, char* uplo, int* n, double* a, int* lda, double* b, int* ldb, int* info ); 00406 void F77_chegst( int* itype, char* uplo, int* n, scomplex* a, int* lda, scomplex* b, int* ldb, int* info ); 00407 void F77_zhegst( int* itype, char* uplo, int* n, dcomplex* a, int* lda, dcomplex* b, int* ldb, int* info ); 00408 00409 void F77_ssygs2( int* itype, char* uplo, int* n, float* a, int* lda, float* b, int* ldb, int* info ); 00410 void F77_dsygs2( int* itype, char* uplo, int* n, double* a, int* lda, double* b, int* ldb, int* info ); 00411 void F77_chegs2( int* itype, char* uplo, int* n, scomplex* a, int* lda, scomplex* b, int* ldb, int* info ); 00412 void F77_zhegs2( int* itype, char* uplo, int* n, dcomplex* a, int* lda, dcomplex* b, int* ldb, int* info ); 00413 00414 // --- Accumulate block Householder matrix T (classic) --- 00415 00416 void F77_slarft( char* direct, char* storev, int* n, int* k, float* v, int* ldv, float* tau, float* t, int* ldt ); 00417 void F77_dlarft( char* direct, char* storev, int* n, int* k, double* v, int* ldv, double* tau, double* t, int* ldt ); 00418 void F77_clarft( char* direct, char* storev, int* n, int* k, scomplex* v, int* ldv, scomplex* tau, scomplex* t, int* ldt ); 00419 void F77_zlarft( char* direct, char* storev, int* n, int* k, dcomplex* v, int* ldv, dcomplex* tau, dcomplex* t, int* ldt ); 00420 00421 // --- Generate a Householder vector (classic) --- 00422 00423 void F77_slarfg( int* n, float* alpha, float* x, int* incx, float* tau ); 00424 void F77_dlarfg( int* n, double* alpha, double* x, int* incx, double* tau ); 00425 void F77_clarfg( int* n, scomplex* alpha, scomplex* x, int* incx, scomplex* tau ); 00426 void F77_zlarfg( int* n, dcomplex* alpha, dcomplex* x, int* incx, dcomplex* tau ); 00427 00428 // --- Form Q from QR factorization --- 00429 00430 void F77_sorgqr( int* m, int* n, int* k, float* a, int* lda, float* tau, float* work, int* lwork, int* info ); 00431 void F77_dorgqr( int* m, int* n, int* k, double* a, int* lda, double* tau, double* work, int* lwork, int* info ); 00432 void F77_cungqr( int* m, int* n, int* k, scomplex* a, int* lda, scomplex* tau, scomplex* work, int* lwork, int* info ); 00433 void F77_zungqr( int* m, int* n, int* k, dcomplex* a, int* lda, dcomplex* tau, dcomplex* work, int* lwork, int* info ); 00434 00435 // --- Apply Q or Q' from QR factorization --- 00436 00437 void F77_sormqr( char* side, char* trans, int* m, int* n, int* k, float* a, int* lda, float* tau, float* c, int* ldc, float* work, int* lwork, int* info ); 00438 void F77_dormqr( char* side, char* trans, int* m, int* n, int* k, double* a, int* lda, double* tau, double* c, int* ldc, double* work, int* lwork, int* info ); 00439 void F77_cunmqr( char* side, char* trans, int* m, int* n, int* k, scomplex* a, int* lda, scomplex* tau, scomplex* c, int* ldc, scomplex* work, int* lwork, int* info ); 00440 void F77_zunmqr( char* side, char* trans, int* m, int* n, int* k, dcomplex* a, int* lda, dcomplex* tau, dcomplex* c, int* ldc, dcomplex* work, int* lwork, int* info ); 00441 00442 void F77_sorm2r( char* side, char* trans, int* m, int* n, int* k, float* a, int* lda, float* tau, float* c, int* ldc, float* work, int* info ); 00443 void F77_dorm2r( char* side, char* trans, int* m, int* n, int* k, double* a, int* lda, double* tau, double* c, int* ldc, double* work, int* info ); 00444 void F77_cunm2r( char* side, char* trans, int* m, int* n, int* k, scomplex* a, int* lda, scomplex* tau, scomplex* c, int* ldc, scomplex* work, int* info ); 00445 void F77_zunm2r( char* side, char* trans, int* m, int* n, int* k, dcomplex* a, int* lda, dcomplex* tau, dcomplex* c, int* ldc, dcomplex* work, int* info ); 00446 00447 // --- Apply Q or Q' from LQ factorization --- 00448 00449 void F77_sormlq( char* side, char* trans, int* m, int* n, int* k, float* a, int* lda, float* tau, float* c, int* ldc, float* work, int* lwork, int* info ); 00450 void F77_dormlq( char* side, char* trans, int* m, int* n, int* k, double* a, int* lda, double* tau, double* c, int* ldc, double* work, int* lwork, int* info ); 00451 void F77_cunmlq( char* side, char* trans, int* m, int* n, int* k, scomplex* a, int* lda, scomplex* tau, scomplex* c, int* ldc, scomplex* work, int* lwork, int* info ); 00452 void F77_zunmlq( char* side, char* trans, int* m, int* n, int* k, dcomplex* a, int* lda, dcomplex* tau, dcomplex* c, int* ldc, dcomplex* work, int* lwork, int* info ); 00453 00454 void F77_sorml2( char* side, char* trans, int* m, int* n, int* k, float* a, int* lda, float* tau, float* c, int* ldc, float* work, int* info ); 00455 void F77_dorml2( char* side, char* trans, int* m, int* n, int* k, double* a, int* lda, double* tau, double* c, int* ldc, double* work, int* info ); 00456 void F77_cunml2( char* side, char* trans, int* m, int* n, int* k, scomplex* a, int* lda, scomplex* tau, scomplex* c, int* ldc, scomplex* work, int* info ); 00457 void F77_zunml2( char* side, char* trans, int* m, int* n, int* k, dcomplex* a, int* lda, dcomplex* tau, dcomplex* c, int* ldc, dcomplex* work, int* info ); 00458 00459 // --- Form Q from tridiagonal reduction --- 00460 00461 void F77_sorgtr( char* uplo, int* m, float* a, int* lda, float* tau, float* work, int* lwork, int* info ); 00462 void F77_dorgtr( char* uplo, int* m, double* a, int* lda, double* tau, double* work, int* lwork, int* info ); 00463 void F77_cungtr( char* uplo, int* m, scomplex* a, int* lda, scomplex* tau, scomplex* work, int* lwork, int* info ); 00464 void F77_zungtr( char* uplo, int* m, dcomplex* a, int* lda, dcomplex* tau, dcomplex* work, int* lwork, int* info ); 00465 00466 // --- Apply Q or Q' from tridiagonal reduction --- 00467 00468 void F77_sormtr( char* side, char* uplo, char* trans, int* m, int* n, float* a, int* lda, float* tau, float* c, int* ldc, float* work, int* lwork, int* info ); 00469 void F77_dormtr( char* side, char* uplo, char* trans, int* m, int* n, double* a, int* lda, double* tau, double* c, int* ldc, double* work, int* lwork, int* info ); 00470 void F77_cunmtr( char* side, char* uplo, char* trans, int* m, int* n, scomplex* a, int* lda, scomplex* tau, scomplex* c, int* ldc, scomplex* work, int* lwork, int* info ); 00471 void F77_zunmtr( char* side, char* uplo, char* trans, int* m, int* n, dcomplex* a, int* lda, dcomplex* tau, dcomplex* c, int* ldc, dcomplex* work, int* lwork, int* info ); 00472 00473 // --- Form Q from bidiagonal reduction --- 00474 00475 void F77_sorgbr( char* vect, int* m, int* n, int* k, float* a, int* lda, float* tau, float* work, int* lwork, int* info ); 00476 void F77_dorgbr( char* vect, int* m, int* n, int* k, double* a, int* lda, double* tau, double* work, int* lwork, int* info ); 00477 void F77_cungbr( char* vect, int* m, int* n, int* k, scomplex* a, int* lda, scomplex* tau, scomplex* work, int* lwork, int* info ); 00478 void F77_zungbr( char* vect, int* m, int* n, int* k, dcomplex* a, int* lda, dcomplex* tau, dcomplex* work, int* lwork, int* info ); 00479 00480 // --- Apply Q or Q' from bidiagonal reduction --- 00481 00482 void F77_sormbr( char* vect, char* side, char* trans, int* m, int* n, int* k, float* a, int* lda, float* tau, float* c, int* ldc, float* work, int* lwork, int* info ); 00483 void F77_dormbr( char* vect, char* side, char* trans, int* m, int* n, int* k, double* a, int* lda, double* tau, double* c, int* ldc, double* work, int* lwork, int* info ); 00484 void F77_cunmbr( char* vect, char* side, char* trans, int* m, int* n, int* k, scomplex* a, int* lda, scomplex* tau, scomplex* c, int* ldc, scomplex* work, int* lwork, int* info ); 00485 void F77_zunmbr( char* vect, char* side, char* trans, int* m, int* n, int* k, dcomplex* a, int* lda, dcomplex* tau, dcomplex* c, int* ldc, dcomplex* work, int* lwork, int* info ); 00486 00487 // --- Tridiagonal QR algorithm --- 00488 00489 void F77_ssteqr( char* jobz, int* n, float* d, float* e, float* z, int* ldz, float* work, int* info ); 00490 void F77_dsteqr( char* jobz, int* n, double* d, double* e, double* z, int* ldz, double* work, int* info ); 00491 void F77_csteqr( char* jobz, int* n, float* d, float* e, scomplex* z, int* ldz, float* work, int* info ); 00492 void F77_zsteqr( char* jobz, int* n, double* d, double* e, dcomplex* z, int* ldz, double* work, int* info ); 00493 00494 // --- Tridiagonal divide-and-conquer algorithm --- 00495 00496 void F77_sstedc( char* compz, int* n, float* d, float* e, float* z, int* ldz, float* work, int* lwork, int* iwork, int* liwork, int* info ); 00497 void F77_dstedc( char* compz, int* n, double* d, double* e, double* z, int* ldz, double* work, int* lwork, int* iwork, int* liwork, int* info ); 00498 void F77_cstedc( char* compz, int* n, float* d, float* e, scomplex* z, int* ldz, scomplex* work, int* lwork, float* rwork, int* lrwork, int* iwork, int* liwork, int* info ); 00499 void F77_zstedc( char* compz, int* n, double* d, double* e, dcomplex* z, int* ldz, dcomplex* work, int* lwork, double* rwork, int* lrwork, int* iwork, int* liwork, int* info ); 00500 00501 // --- Tridiagonal MRRR algorithm --- 00502 00503 void F77_sstemr( char* jobz, char* range, int* n, float* d, float* e, int* vl, int* vu, int* il, int* iu, int* m, float* w, float* z, int* ldz, int* nzc, int* isuppz, int* tryrac, float* work, int* lwork, int* iwork, int* liwork, int* info ); 00504 void F77_dstemr( char* jobz, char* range, int* n, double* d, double* e, int* vl, int* vu, int* il, int* iu, int* m, double* w, double* z, int* ldz, int* nzc, int* isuppz, int* tryrac, double* work, int* lwork, int* iwork, int* liwork, int* info ); 00505 void F77_cstemr( char* jobz, char* range, int* n, float* d, float* e, int* vl, int* vu, int* il, int* iu, int* m, float* w, scomplex* z, int* ldz, int* nzc, int* isuppz, int* tryrac, float* work, int* lwork, int* iwork, int* liwork, int* info ); 00506 void F77_zstemr( char* jobz, char* range, int* n, double* d, double* e, int* vl, int* vu, int* il, int* iu, int* m, double* w, dcomplex* z, int* ldz, int* nzc, int* isuppz, int* tryrac, double* work, int* lwork, int* iwork, int* liwork, int* info ); 00507 00508 // --- Hermitian eigenvalue decomposition (QR algorithm) --- 00509 00510 void F77_ssyev( char* jobz, char* uplo, int* n, float* a, int* lda, float* w, float* work, int* lwork, float* rwork, int* info ); 00511 void F77_dsyev( char* jobz, char* uplo, int* n, double* a, int* lda, double* w, double* work, int* lwork, double* rwork, int* info ); 00512 void F77_cheev( char* jobz, char* uplo, int* n, scomplex* a, int* lda, float* w, scomplex* work, int* lwork, float* rwork, int* info ); 00513 void F77_zheev( char* jobz, char* uplo, int* n, dcomplex* a, int* lda, double* w, dcomplex* work, int* lwork, double* rwork, int* info ); 00514 00515 // --- Hermitian eigenvalue decomposition (divide-and-conquer) --- 00516 00517 void F77_ssyevd( char* jobz, char* uplo, int* n, float* a, int* lda, float* w, float* work, int* lwork, int* iwork, int* liwork, int* info ); 00518 void F77_dsyevd( char* jobz, char* uplo, int* n, double* a, int* lda, double* w, double* work, int* lwork, int* iwork, int* liwork, int* info ); 00519 void F77_cheevd( char* jobz, char* uplo, int* n, scomplex* a, int* lda, float* w, scomplex* work, int* lwork, float* rwork, int* lrwork, int* iwork, int* liwork, int* info ); 00520 void F77_zheevd( char* jobz, char* uplo, int* n, dcomplex* a, int* lda, double* w, dcomplex* work, int* lwork, double* rwork, int* lrwork, int* iwork, int* liwork, int* info ); 00521 00522 // --- Hermitian eigenvalue decomposition (MRRR) --- 00523 00524 void F77_ssyevr( char* jobz, char* range, char* uplo, int* n, float* a, int* lda, float* vl, float* vu, int* il, int* iu, float* abstol, int* m, float* w, float* z, int* ldz, int* isuppz, float* work, int* lwork, int* iwork, int* liwork, int* info ); 00525 void F77_dsyevr( char* jobz, char* range, char* uplo, int* n, double* a, int* lda, double* vl, double* vu, int* il, int* iu, double* abstol, int* m, double* w, double* z, int* ldz, int* isuppz, double* work, int* lwork, int* iwork, int* liwork, int* info ); 00526 void F77_cheevr( char* jobz, char* range, char* uplo, int* n, scomplex* a, int* lda, float* vl, float* vu, int* il, int* iu, float* abstol, int* m, float* w, scomplex* z, int* ldz, int* isuppz, scomplex* work, int* lwork, float* rwork, int* lrwork, int* iwork, int* liwork, int* info ); 00527 void F77_zheevr( char* jobz, char* range, char* uplo, int* n, dcomplex* a, int* lda, double* vl, double* vu, int* il, int* iu, double* abstol, int* m, double* w, dcomplex* z, int* ldz, int* isuppz, dcomplex* work, int* lwork, double* rwork, int* lrwork, int* iwork, int* liwork, int* info ); 00528 00529 // --- Bidiagonal QR algorithm --- 00530 00531 void F77_sbdsqr( char* uplo, int* n, int* ncvt, int* nru, int* ncc, float* d, float* e, float* vt, int* ldvt, float* u, int* ldu, float* c, int* ldc, float* rwork, int* info ); 00532 void F77_dbdsqr( char* uplo, int* n, int* ncvt, int* nru, int* ncc, double* d, double* e, double* vt, int* ldvt, double* u, int* ldu, double* c, int* ldc, double* rwork, int* info ); 00533 void F77_cbdsqr( char* uplo, int* n, int* ncvt, int* nru, int* ncc, float* d, float* e, scomplex* vt, int* ldvt, scomplex* u, int* ldu, scomplex* c, int* ldc, float* rwork, int* info ); 00534 void F77_zbdsqr( char* uplo, int* n, int* ncvt, int* nru, int* ncc, double* d, double* e, dcomplex* vt, int* ldvt, dcomplex* u, int* ldu, dcomplex* c, int* ldc, double* rwork, int* info ); 00535 00536 // --- Bidiagonal divide-and-conquor algorithm --- 00537 00538 void F77_sbdsdc( char* uplo, char* compq, int* n, float* d, float* e, float* u, int* ldu, float* vt, int* ldvt, float* q, float* iq, float* work, int* iwork, int* info ); 00539 void F77_dbdsdc( char* uplo, char* compq, int* n, double* d, double* e, double* u, int* ldu, double* vt, int* ldvt, double* q, double* iq, double* work, int* iwork, int* info ); 00540 00541 // --- General matrix singular value decomposition (QR algorithm) --- 00542 00543 void F77_sgesvd( char* jobu, char* jobv, int* m, int* n, float* a, int* lda, float* s, float* u, int* ldu, float* vt, int* ldvt, float* work, int* lwork, int* info ); 00544 void F77_dgesvd( char* jobu, char* jobv, int* m, int* n, double* a, int* lda, double* s, double* u, int* ldu, double* vt, int* ldvt, double* work, int* lwork, int* info ); 00545 void F77_cgesvd( char* jobu, char* jobv, int* m, int* n, scomplex* a, int* lda, float* s, scomplex* u, int* ldu, scomplex* vt, int* ldvt, scomplex* work, int* lwork, float* rwork, int* info ); 00546 void F77_zgesvd( char* jobu, char* jobv, int* m, int* n, dcomplex* a, int* lda, double* s, dcomplex* u, int* ldu, dcomplex* vt, int* ldvt, dcomplex* work, int* lwork, double* rwork, int* info ); 00547 00548 // --- General matrix singular value decomposition (divide-and-conquer) --- 00549 00550 void F77_sgesdd( char* jobz, int* m, int* n, float* a, int* lda, float* s, float* u, int* ldu, float* vt, int* ldvt, float* work, int* lwork, int* iwork, int* info ); 00551 void F77_dgesdd( char* jobz, int* m, int* n, double* a, int* lda, double* s, double* u, int* ldu, double* vt, int* ldvt, double* work, int* lwork, int* iwork, int* info ); 00552 void F77_cgesdd( char* jobz, int* m, int* n, scomplex* a, int* lda, float* s, scomplex* u, int* ldu, scomplex* vt, int* ldvt, scomplex* work, int* lwork, float* rwork, int* iwork, int* info ); 00553 void F77_zgesdd( char* jobz, int* m, int* n, dcomplex* a, int* lda, double* s, dcomplex* u, int* ldu, dcomplex* vt, int* ldvt, dcomplex* work, int* lwork, double* rwork, int* iwork, int* info ); 00554 00555 // --- Swap rows --- 00556 00557 void F77_slaswp( int* n, float* a, int* lda, int* k1, int* k2, int* ipiv, int* incx ); 00558 void F77_dlaswp( int* n, double* a, int* lda, int* k1, int* k2, int* ipiv, int* incx ); 00559 void F77_claswp( int* n, scomplex* a, int* lda, int* k1, int* k2, int* ipiv, int* incx ); 00560 void F77_zlaswp( int* n, dcomplex* a, int* lda, int* k1, int* k2, int* ipiv, int* incx ); 00561 00562 // --- Initialize a matrix --- 00563 00564 void F77_slaset( char* uplo, int* m, int* n, float* alpha, float* beta, float* a, int* lda ); 00565 void F77_dlaset( char* uplo, int* m, int* n, double* alpha, double* beta, double* a, int* lda ); 00566 void F77_claset( char* uplo, int* m, int* n, scomplex* alpha, scomplex* beta, scomplex* a, int* lda ); 00567 void F77_zlaset( char* uplo, int* m, int* n, dcomplex* alpha, dcomplex* beta, dcomplex* a, int* lda ); 00568