max@0: // Copyright (C) 2008-2011 NICTA (www.nicta.com.au) max@0: // Copyright (C) 2008-2011 Conrad Sanderson max@0: // Copyright (C) 2009 Edmund Highcock max@0: // Copyright (C) 2011 James Sanders max@0: // max@0: // This file is part of the Armadillo C++ library. max@0: // It is provided without any warranty of fitness max@0: // for any purpose. You can redistribute this file max@0: // and/or modify it under the terms of the GNU max@0: // Lesser General Public License (LGPL) as published max@0: // by the Free Software Foundation, either version 3 max@0: // of the License or (at your option) any later version. max@0: // (see http://www.opensource.org/licenses for more info) max@0: max@0: max@0: max@0: #ifdef ARMA_USE_LAPACK max@0: max@0: max@0: #if !defined(ARMA_BLAS_CAPITALS) max@0: max@0: #define arma_sgetrf sgetrf max@0: #define arma_dgetrf dgetrf max@0: #define arma_cgetrf cgetrf max@0: #define arma_zgetrf zgetrf max@0: max@0: #define arma_sgetri sgetri max@0: #define arma_dgetri dgetri max@0: #define arma_cgetri cgetri max@0: #define arma_zgetri zgetri max@0: max@0: #define arma_strtri strtri max@0: #define arma_dtrtri dtrtri max@0: #define arma_ctrtri ctrtri max@0: #define arma_ztrtri ztrtri max@0: max@0: #define arma_ssyev ssyev max@0: #define arma_dsyev dsyev max@0: max@0: #define arma_cheev cheev max@0: #define arma_zheev zheev max@0: max@0: #define arma_sgeev sgeev max@0: #define arma_dgeev dgeev max@0: max@0: #define arma_cgeev cgeev max@0: #define arma_zgeev zgeev max@0: max@0: #define arma_spotrf spotrf max@0: #define arma_dpotrf dpotrf max@0: #define arma_cpotrf cpotrf max@0: #define arma_zpotrf zpotrf max@0: max@0: #define arma_spotri spotri max@0: #define arma_dpotri dpotri max@0: #define arma_cpotri cpotri max@0: #define arma_zpotri zpotri max@0: max@0: #define arma_sgeqrf sgeqrf max@0: #define arma_dgeqrf dgeqrf max@0: #define arma_cgeqrf cgeqrf max@0: #define arma_zgeqrf zgeqrf max@0: max@0: #define arma_sorgqr sorgqr max@0: #define arma_dorgqr dorgqr max@0: max@0: #define arma_cungqr cungqr max@0: #define arma_zungqr zungqr max@0: max@0: #define arma_sgesvd sgesvd max@0: #define arma_dgesvd dgesvd max@0: max@0: #define arma_cgesvd cgesvd max@0: #define arma_zgesvd zgesvd max@0: max@0: #define arma_sgesv sgesv max@0: #define arma_dgesv dgesv max@0: #define arma_cgesv cgesv max@0: #define arma_zgesv zgesv max@0: max@0: #define arma_sgels sgels max@0: #define arma_dgels dgels max@0: #define arma_cgels cgels max@0: #define arma_zgels zgels max@0: max@0: #define arma_strtrs strtrs max@0: #define arma_dtrtrs dtrtrs max@0: #define arma_ctrtrs ctrtrs max@0: #define arma_ztrtrs ztrtrs max@0: max@0: #define arma_sgees sgees max@0: #define arma_dgees dgees max@0: #define arma_cgees cgees max@0: #define arma_zgees zgees max@0: max@0: #define arma_strsyl strsyl max@0: #define arma_dtrsyl dtrsyl max@0: #define arma_ctrsyl ctrsyl max@0: #define arma_ztrsyl ztrsyl max@0: max@0: #define arma_ssytrf ssytrf max@0: #define arma_dsytrf dsytrf max@0: #define arma_csytrf csytrf max@0: #define arma_zsytrf zsytrf max@0: max@0: #define arma_ssytri ssytri max@0: #define arma_dsytri dsytri max@0: #define arma_csytri csytri max@0: #define arma_zsytri zsytri max@0: max@0: #else max@0: max@0: #define arma_sgetrf SGETRF max@0: #define arma_dgetrf DGETRF max@0: #define arma_cgetrf CGETRF max@0: #define arma_zgetrf ZGETRF max@0: max@0: #define arma_sgetri SGETRI max@0: #define arma_dgetri DGETRI max@0: #define arma_cgetri CGETRI max@0: #define arma_zgetri ZGETRI max@0: max@0: #define arma_strtri STRTRI max@0: #define arma_dtrtri DTRTRI max@0: #define arma_ctrtri CTRTRI max@0: #define arma_ztrtri ZTRTRI max@0: max@0: #define arma_ssyev SSYEV max@0: #define arma_dsyev DSYEV max@0: max@0: #define arma_cheev CHEEV max@0: #define arma_zheev ZHEEV max@0: max@0: #define arma_sgeev SGEEV max@0: #define arma_dgeev DGEEV max@0: max@0: #define arma_cgeev CGEEV max@0: #define arma_zgeev ZGEEV max@0: max@0: #define arma_spotrf SPOTRF max@0: #define arma_dpotrf DPOTRF max@0: #define arma_cpotrf CPOTRF max@0: #define arma_zpotrf ZPOTRF max@0: max@0: #define arma_spotri SPOTRI max@0: #define arma_dpotri DPOTRI max@0: #define arma_cpotri CPOTRI max@0: #define arma_zpotri ZPOTRI max@0: max@0: #define arma_sgeqrf SGEQRF max@0: #define arma_dgeqrf DGEQRF max@0: #define arma_cgeqrf CGEQRF max@0: #define arma_zgeqrf ZGEQRF max@0: max@0: #define arma_sorgqr SORGQR max@0: #define arma_dorgqr DORGQR max@0: max@0: #define arma_cungqr CUNGQR max@0: #define arma_zungqr ZUNGQR max@0: max@0: #define arma_sgesvd SGESVD max@0: #define arma_dgesvd DGESVD max@0: max@0: #define arma_cgesvd CGESVD max@0: #define arma_zgesvd ZGESVD max@0: max@0: #define arma_sgesv SGESV max@0: #define arma_dgesv DGESV max@0: #define arma_cgesv CGESV max@0: #define arma_zgesv ZGESV max@0: max@0: #define arma_sgels SGELS max@0: #define arma_dgels DGELS max@0: #define arma_cgels CGELS max@0: #define arma_zgels ZGELS max@0: max@0: #define arma_strtrs STRTRS max@0: #define arma_dtrtrs DTRTRS max@0: #define arma_ctrtrs CTRTRS max@0: #define arma_ztrtrs ZTRTRS max@0: max@0: #define arma_sgees SGEES max@0: #define arma_dgees DGEES max@0: #define arma_cgees CGEES max@0: #define arma_zgees ZGEES max@0: max@0: #define arma_strsyl STRSYL max@0: #define arma_dtrsyl DTRSYL max@0: #define arma_ctrsyl CTRSYL max@0: #define arma_ztrsyl ZTRSYL max@0: max@0: #define arma_ssytrf SSYTRF max@0: #define arma_dsytrf DSYTRF max@0: #define arma_csytrf CSYTRF max@0: #define arma_zsytrf ZSYTRF max@0: max@0: #define arma_ssytri SSYTRI max@0: #define arma_dsytri DSYTRI max@0: #define arma_csytri CSYTRI max@0: #define arma_zsytri ZSYTRI max@0: max@0: #endif max@0: max@0: max@0: max@0: extern "C" max@0: { max@0: // LU factorisation max@0: void arma_fortran(arma_sgetrf)(blas_int* m, blas_int* n, float* a, blas_int* lda, blas_int* ipiv, blas_int* info); max@0: void arma_fortran(arma_dgetrf)(blas_int* m, blas_int* n, double* a, blas_int* lda, blas_int* ipiv, blas_int* info); max@0: void arma_fortran(arma_cgetrf)(blas_int* m, blas_int* n, void* a, blas_int* lda, blas_int* ipiv, blas_int* info); max@0: void arma_fortran(arma_zgetrf)(blas_int* m, blas_int* n, void* a, blas_int* lda, blas_int* ipiv, blas_int* info); max@0: max@0: // matrix inversion (using LU factorisation result) max@0: void arma_fortran(arma_sgetri)(blas_int* n, float* a, blas_int* lda, blas_int* ipiv, float* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_dgetri)(blas_int* n, double* a, blas_int* lda, blas_int* ipiv, double* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_cgetri)(blas_int* n, void* a, blas_int* lda, blas_int* ipiv, void* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_zgetri)(blas_int* n, void* a, blas_int* lda, blas_int* ipiv, void* work, blas_int* lwork, blas_int* info); max@0: max@0: // matrix inversion (triangular matrices) max@0: void arma_fortran(arma_strtri)(char* uplo, char* diag, blas_int* n, float* a, blas_int* lda, blas_int* info); max@0: void arma_fortran(arma_dtrtri)(char* uplo, char* diag, blas_int* n, double* a, blas_int* lda, blas_int* info); max@0: void arma_fortran(arma_ctrtri)(char* uplo, char* diag, blas_int* n, void* a, blas_int* lda, blas_int* info); max@0: void arma_fortran(arma_ztrtri)(char* uplo, char* diag, blas_int* n, void* a, blas_int* lda, blas_int* info); max@0: max@0: // eigenvector decomposition of symmetric real matrices max@0: void arma_fortran(arma_ssyev)(char* jobz, char* uplo, blas_int* n, float* a, blas_int* lda, float* w, float* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_dsyev)(char* jobz, char* uplo, blas_int* n, double* a, blas_int* lda, double* w, double* work, blas_int* lwork, blas_int* info); max@0: max@0: // eigenvector decomposition of hermitian matrices (complex) max@0: void arma_fortran(arma_cheev)(char* jobz, char* uplo, blas_int* n, void* a, blas_int* lda, float* w, void* work, blas_int* lwork, float* rwork, blas_int* info); max@0: void arma_fortran(arma_zheev)(char* jobz, char* uplo, blas_int* n, void* a, blas_int* lda, double* w, void* work, blas_int* lwork, double* rwork, blas_int* info); max@0: max@0: // eigenvector decomposition of general real matrices max@0: void arma_fortran(arma_sgeev)(char* jobvl, char* jobvr, blas_int* n, float* a, blas_int* lda, float* wr, float* wi, float* vl, blas_int* ldvl, float* vr, blas_int* ldvr, float* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_dgeev)(char* jobvl, char* jobvr, blas_int* n, double* a, blas_int* lda, double* wr, double* wi, double* vl, blas_int* ldvl, double* vr, blas_int* ldvr, double* work, blas_int* lwork, blas_int* info); max@0: max@0: // eigenvector decomposition of general complex matrices max@0: void arma_fortran(arma_cgeev)(char* jobvl, char* jobvr, blas_int* n, void* a, blas_int* lda, void* w, void* vl, blas_int* ldvl, void* vr, blas_int* ldvr, void* work, blas_int* lwork, float* rwork, blas_int* info); max@0: void arma_fortran(arma_zgeev)(char* jobvl, char* jobvr, blas_int* n, void* a, blas_int* lda, void* w, void* vl, blas_int* ldvl, void* vr, blas_int* ldvr, void* work, blas_int* lwork, double* rwork, blas_int* info); max@0: max@0: // Cholesky decomposition max@0: void arma_fortran(arma_spotrf)(char* uplo, blas_int* n, float* a, blas_int* lda, blas_int* info); max@0: void arma_fortran(arma_dpotrf)(char* uplo, blas_int* n, double* a, blas_int* lda, blas_int* info); max@0: void arma_fortran(arma_cpotrf)(char* uplo, blas_int* n, void* a, blas_int* lda, blas_int* info); max@0: void arma_fortran(arma_zpotrf)(char* uplo, blas_int* n, void* a, blas_int* lda, blas_int* info); max@0: max@0: // matrix inversion (using Cholesky decomposition result) max@0: void arma_fortran(arma_spotri)(char* uplo, blas_int* n, float* a, blas_int* lda, blas_int* info); max@0: void arma_fortran(arma_dpotri)(char* uplo, blas_int* n, double* a, blas_int* lda, blas_int* info); max@0: void arma_fortran(arma_cpotri)(char* uplo, blas_int* n, void* a, blas_int* lda, blas_int* info); max@0: void arma_fortran(arma_zpotri)(char* uplo, blas_int* n, void* a, blas_int* lda, blas_int* info); max@0: max@0: // QR decomposition max@0: void arma_fortran(arma_sgeqrf)(blas_int* m, blas_int* n, float* a, blas_int* lda, float* tau, float* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_dgeqrf)(blas_int* m, blas_int* n, double* a, blas_int* lda, double* tau, double* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_cgeqrf)(blas_int* m, blas_int* n, void* a, blas_int* lda, void* tau, void* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_zgeqrf)(blas_int* m, blas_int* n, void* a, blas_int* lda, void* tau, void* work, blas_int* lwork, blas_int* info); max@0: max@0: // Q matrix calculation from QR decomposition (real matrices) max@0: void arma_fortran(arma_sorgqr)(blas_int* m, blas_int* n, blas_int* k, float* a, blas_int* lda, float* tau, float* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_dorgqr)(blas_int* m, blas_int* n, blas_int* k, double* a, blas_int* lda, double* tau, double* work, blas_int* lwork, blas_int* info); max@0: max@0: // Q matrix calculation from QR decomposition (complex matrices) max@0: void arma_fortran(arma_cungqr)(blas_int* m, blas_int* n, blas_int* k, void* a, blas_int* lda, void* tau, void* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_zungqr)(blas_int* m, blas_int* n, blas_int* k, void* a, blas_int* lda, void* tau, void* work, blas_int* lwork, blas_int* info); max@0: max@0: // SVD (real matrices) max@0: void arma_fortran(arma_sgesvd)(char* jobu, char* jobvt, blas_int* m, blas_int* n, float* a, blas_int* lda, float* s, float* u, blas_int* ldu, float* vt, blas_int* ldvt, float* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_dgesvd)(char* jobu, char* jobvt, blas_int* m, blas_int* n, double* a, blas_int* lda, double* s, double* u, blas_int* ldu, double* vt, blas_int* ldvt, double* work, blas_int* lwork, blas_int* info); max@0: max@0: // SVD (complex matrices) max@0: void arma_fortran(arma_cgesvd)(char* jobu, char* jobvt, blas_int* m, blas_int* n, void* a, blas_int* lda, float* s, void* u, blas_int* ldu, void* vt, blas_int* ldvt, void* work, blas_int* lwork, float* rwork, blas_int* info); max@0: void arma_fortran(arma_zgesvd)(char* jobu, char* jobvt, blas_int* m, blas_int* n, void* a, blas_int* lda, double* s, void* u, blas_int* ldu, void* vt, blas_int* ldvt, void* work, blas_int* lwork, double* rwork, blas_int* info); max@0: max@0: // solve system of linear equations, using LU decomposition max@0: void arma_fortran(arma_sgesv)(blas_int* n, blas_int* nrhs, float* a, blas_int* lda, blas_int* ipiv, float* b, blas_int* ldb, blas_int* info); max@0: void arma_fortran(arma_dgesv)(blas_int* n, blas_int* nrhs, double* a, blas_int* lda, blas_int* ipiv, double* b, blas_int* ldb, blas_int* info); max@0: void arma_fortran(arma_cgesv)(blas_int* n, blas_int* nrhs, void* a, blas_int* lda, blas_int* ipiv, void* b, blas_int* ldb, blas_int* info); max@0: void arma_fortran(arma_zgesv)(blas_int* n, blas_int* nrhs, void* a, blas_int* lda, blas_int* ipiv, void* b, blas_int* ldb, blas_int* info); max@0: max@0: // solve over/underdetermined system of linear equations max@0: void arma_fortran(arma_sgels)(char* trans, blas_int* m, blas_int* n, blas_int* nrhs, float* a, blas_int* lda, float* b, blas_int* ldb, float* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_dgels)(char* trans, blas_int* m, blas_int* n, blas_int* nrhs, double* a, blas_int* lda, double* b, blas_int* ldb, double* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_cgels)(char* trans, blas_int* m, blas_int* n, blas_int* nrhs, void* a, blas_int* lda, void* b, blas_int* ldb, void* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_zgels)(char* trans, blas_int* m, blas_int* n, blas_int* nrhs, void* a, blas_int* lda, void* b, blas_int* ldb, void* work, blas_int* lwork, blas_int* info); max@0: max@0: // solve a triangular system of linear equations max@0: void arma_fortran(arma_strtrs)(char* uplo, char* trans, char* diag, blas_int* n, blas_int* nrhs, const float* a, blas_int* lda, float* b, blas_int* ldb, blas_int* info); max@0: void arma_fortran(arma_dtrtrs)(char* uplo, char* trans, char* diag, blas_int* n, blas_int* nrhs, const double* a, blas_int* lda, double* b, blas_int* ldb, blas_int* info); max@0: void arma_fortran(arma_ctrtrs)(char* uplo, char* trans, char* diag, blas_int* n, blas_int* nrhs, const void* a, blas_int* lda, void* b, blas_int* ldb, blas_int* info); max@0: void arma_fortran(arma_ztrtrs)(char* uplo, char* trans, char* diag, blas_int* n, blas_int* nrhs, const void* a, blas_int* lda, void* b, blas_int* ldb, blas_int* info); max@0: max@0: // Schur decomposition (real matrices) max@0: void arma_fortran(arma_sgees)(char* jobvs, char* sort, blas_int* select, blas_int* n, float* a, blas_int* lda, blas_int* sdim, float* wr, float* wi, float* vs, blas_int* ldvs, float* work, blas_int* lwork, blas_int* bwork, blas_int* info); max@0: void arma_fortran(arma_dgees)(char* jobvs, char* sort, blas_int* select, blas_int* n, double* a, blas_int* lda, blas_int* sdim, double* wr, double* wi, double* vs, blas_int* ldvs, double* work, blas_int* lwork, blas_int* bwork, blas_int* info); max@0: max@0: // Schur decomposition (complex matrices) max@0: void arma_fortran(arma_cgees)(char* jobvs, char* sort, blas_int* select, blas_int* n, void* a, blas_int* lda, blas_int* sdim, void* w, void* vs, blas_int* ldvs, void* work, blas_int* lwork, float* rwork, blas_int* bwork, blas_int* info); max@0: void arma_fortran(arma_zgees)(char* jobvs, char* sort, blas_int* select, blas_int* n, void* a, blas_int* lda, blas_int* sdim, void* w, void* vs, blas_int* ldvs, void* work, blas_int* lwork, double* rwork, blas_int* bwork, blas_int* info); max@0: max@0: // solve a Sylvester equation ax + xb = c, with a and b assumed to be in Schur form max@0: void arma_fortran(arma_strsyl)(char* transa, char* transb, blas_int* isgn, blas_int* m, blas_int* n, const float* a, blas_int* lda, const float* b, blas_int* ldb, float* c, blas_int* ldc, float* scale, blas_int* info); max@0: void arma_fortran(arma_dtrsyl)(char* transa, char* transb, blas_int* isgn, blas_int* m, blas_int* n, const double* a, blas_int* lda, const double* b, blas_int* ldb, double* c, blas_int* ldc, double* scale, blas_int* info); max@0: void arma_fortran(arma_ctrsyl)(char* transa, char* transb, blas_int* isgn, blas_int* m, blas_int* n, const void* a, blas_int* lda, const void* b, blas_int* ldb, void* c, blas_int* ldc, float* scale, blas_int* info); max@0: void arma_fortran(arma_ztrsyl)(char* transa, char* transb, blas_int* isgn, blas_int* m, blas_int* n, const void* a, blas_int* lda, const void* b, blas_int* ldb, void* c, blas_int* ldc, double* scale, blas_int* info); max@0: max@0: void arma_fortran(arma_ssytrf)(char* uplo, blas_int* n, float* a, blas_int* lda, blas_int* ipiv, float* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_dsytrf)(char* uplo, blas_int* n, double* a, blas_int* lda, blas_int* ipiv, double* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_csytrf)(char* uplo, blas_int* n, void* a, blas_int* lda, blas_int* ipiv, void* work, blas_int* lwork, blas_int* info); max@0: void arma_fortran(arma_zsytrf)(char* uplo, blas_int* n, void* a, blas_int* lda, blas_int* ipiv, void* work, blas_int* lwork, blas_int* info); max@0: max@0: void arma_fortran(arma_ssytri)(char* uplo, blas_int* n, float* a, blas_int* lda, blas_int* ipiv, float* work, blas_int* info); max@0: void arma_fortran(arma_dsytri)(char* uplo, blas_int* n, double* a, blas_int* lda, blas_int* ipiv, double* work, blas_int* info); max@0: void arma_fortran(arma_csytri)(char* uplo, blas_int* n, void* a, blas_int* lda, blas_int* ipiv, void* work, blas_int* info); max@0: void arma_fortran(arma_zsytri)(char* uplo, blas_int* n, void* a, blas_int* lda, blas_int* ipiv, void* work, blas_int* info); max@0: max@0: // void arma_fortran(arma_dgeqp3)(blas_int* m, blas_int* n, double* a, blas_int* lda, blas_int* jpvt, double* tau, double* work, blas_int* lwork, blas_int* info); max@0: // void arma_fortran(arma_dormqr)(char* side, char* trans, blas_int* m, blas_int* n, blas_int* k, double* a, blas_int* lda, double* tau, double* c, blas_int* ldc, double* work, blas_int* lwork, blas_int* info); max@0: // void arma_fortran(arma_dposv)(char* uplo, blas_int* n, blas_int* nrhs, double* a, blas_int* lda, double* b, blas_int* ldb, blas_int* info); max@0: } max@0: max@0: max@0: #endif