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