diff --git a/include/cantera/numerics/ctlapack.h b/include/cantera/numerics/ctlapack.h index 0e3e6cc1e..8a3d5f7cd 100644 --- a/include/cantera/numerics/ctlapack.h +++ b/include/cantera/numerics/ctlapack.h @@ -19,6 +19,7 @@ #define _DGETRF_ dgetrf #define _DGETRS_ dgetrs #define _DGETRI_ dgetri +#define _DGELSS_ dgelss #define _DGBCON_ dgbcon #define _DGBSV_ dgbsv #define _DGBTRF_ dgbtrf @@ -39,6 +40,7 @@ #define _DGETRF_ dgetrf_ #define _DGETRS_ dgetrs_ #define _DGETRI_ dgetri_ +#define _DGELSS_ dgelss_ #define _DGBCON_ dgbcon_ #define _DGBSV_ dgbsv_ #define _DGBTRF_ dgbtrf_ @@ -107,6 +109,11 @@ extern "C" { int _DGETRI_(const integer* n, doublereal* a, const integer* lda, integer* ipiv, doublereal* work, integer* lwork, integer* info); + int _DGELSS_(const integer* m, const integer* n, const integer* nrhs, + doublereal* a, const integer* lda, doublereal* b, + const integer* ldb, doublereal* s, const doublereal* rcond, + integer* rank, doublereal* work, integer* lwork, integer* info); + int _DGBSV_(integer* n, integer* kl, integer* ku, integer* nrhs, doublereal* a, integer* lda, integer* ipiv, doublereal* b, integer* ldb, integer* info); @@ -251,6 +258,27 @@ inline void ct_dgbsv(int n, int kl, int ku, int nrhs, info = f_info; } +inline void ct_dgelss(size_t m, size_t n, size_t nrhs, doublereal* a, + size_t lda, doublereal* b, size_t ldb, doublereal* s, + doublereal rcond, size_t& rank, doublereal* work, + int& lwork, int& info) +{ + integer f_m = static_cast(m); + integer f_n = static_cast(n); + integer f_nrhs = static_cast(nrhs); + integer f_lda = static_cast(lda); + integer f_ldb = static_cast(ldb); + integer f_lwork = static_cast(lwork); + integer f_rank, f_info; + + _DGELSS_(&f_m, &f_n, &f_nrhs, a, &f_lda, b, &f_ldb, s, &rcond, &f_rank, + work, &f_lwork, &f_info); + + info = static_cast(f_info); + rank = static_cast(f_rank); + lwork = static_cast(f_lwork); +} + inline void ct_dgbtrf(size_t m, size_t n, size_t kl, size_t ku, doublereal* a, size_t lda, integer* ipiv, int& info) {