55
66TH_EXTERNC void dgesv_ (int * n , int * nrhs , double * a , int * lda , int * ipiv , double * b , int * ldb , int * info );
77TH_EXTERNC void sgesv_ (int * n , int * nrhs , float * a , int * lda , int * ipiv , float * b , int * ldb , int * info );
8+ TH_EXTERNC void dtrtrs_ (char * uplo , char * trans , char * diag , int * n , int * nrhs , double * a , int * lda , double * b , int * ldb , int * info );
9+ TH_EXTERNC void strtrs_ (char * uplo , char * trans , char * diag , int * n , int * nrhs , float * a , int * lda , float * b , int * ldb , int * info );
810TH_EXTERNC void dgels_ (char * trans , int * m , int * n , int * nrhs , double * a , int * lda , double * b , int * ldb , double * work , int * lwork , int * info );
911TH_EXTERNC void sgels_ (char * trans , int * m , int * n , int * nrhs , float * a , int * lda , float * b , int * ldb , float * work , int * lwork , int * info );
1012TH_EXTERNC void dsyev_ (char * jobz , char * uplo , int * n , double * a , int * lda , double * w , double * work , int * lwork , int * info );
@@ -29,6 +31,7 @@ TH_EXTERNC void sorgqr_(int *m, int *n, int *k, float *a, int *lda, float *tau,
2931TH_EXTERNC void dorgqr_ (int * m , int * n , int * k , double * a , int * lda , double * tau , double * work , int * lwork , int * info );
3032
3133
34+ /* Compute the solution to a real system of linear equations A * X = B */
3235void THLapack_ (gesv )(int n , int nrhs , real * a , int lda , int * ipiv , real * b , int ldb , int * info )
3336{
3437#ifdef USE_LAPACK
@@ -43,6 +46,23 @@ void THLapack_(gesv)(int n, int nrhs, real *a, int lda, int *ipiv, real *b, int
4346 return ;
4447}
4548
49+ /* Solve a triangular system of the form A * X = B or A^T * X = B */
50+ void THLapack_ (trtrs )(char uplo , char trans , char diag , int n , int nrhs , real * a , int lda , real * b , int ldb , int * info )
51+ {
52+ #ifdef USE_LAPACK
53+ #if defined(TH_REAL_IS_DOUBLE )
54+ dtrtrs_ (& uplo , & trans , & diag , & n , & nrhs , a , & lda , b , & ldb , info );
55+ #else
56+ strtrs_ (& uplo , & trans , & diag , & n , & nrhs , a , & lda , b , & ldb , info );
57+ #endif
58+ #else
59+ THError ("trtrs : Lapack library not found in compile time\n" );
60+ #endif
61+ return ;
62+ }
63+
64+ /* Solve overdetermined or underdetermined real linear systems involving an
65+ M-by-N matrix A, or its transpose, using a QR or LQ factorization of A */
4666void THLapack_ (gels )(char trans , int m , int n , int nrhs , real * a , int lda , real * b , int ldb , real * work , int lwork , int * info )
4767{
4868#ifdef USE_LAPACK
@@ -56,6 +76,8 @@ void THLapack_(gels)(char trans, int m, int n, int nrhs, real *a, int lda, real
5676#endif
5777}
5878
79+ /* Compute all eigenvalues and, optionally, eigenvectors of a real symmetric
80+ matrix A */
5981void THLapack_ (syev )(char jobz , char uplo , int n , real * a , int lda , real * w , real * work , int lwork , int * info )
6082{
6183#ifdef USE_LAPACK
@@ -69,6 +91,8 @@ void THLapack_(syev)(char jobz, char uplo, int n, real *a, int lda, real *w, rea
6991#endif
7092}
7193
94+ /* Compute for an N-by-N real nonsymmetric matrix A, the eigenvalues and,
95+ optionally, the left and/or right eigenvectors */
7296void THLapack_ (geev )(char jobvl , char jobvr , int n , real * a , int lda , real * wr , real * wi , real * vl , int ldvl , real * vr , int ldvr , real * work , int lwork , int * info )
7397{
7498#ifdef USE_LAPACK
@@ -82,6 +106,8 @@ void THLapack_(geev)(char jobvl, char jobvr, int n, real *a, int lda, real *wr,
82106#endif
83107}
84108
109+ /* Compute the singular value decomposition (SVD) of a real M-by-N matrix A,
110+ optionally computing the left and/or right singular vectors */
85111void THLapack_ (gesvd )(char jobu , char jobvt , int m , int n , real * a , int lda , real * s , real * u , int ldu , real * vt , int ldvt , real * work , int lwork , int * info )
86112{
87113#ifdef USE_LAPACK
0 commit comments